Only checks for jack if it is enabled and hence only links to jack if
[libav.git] / configure
CommitLineData
aeb29222 1#!/bin/sh
0f3cb305 2#
f57620d5
MR
3# FFmpeg configure script
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."
505dfb09
DB
47 echo "THIS IS NOT A BUG IN FFMPEG, DO NOT REPORT IT AS SUCH."
48 echo "Instead, install a working POSIX-compatible shell."
49 echo "Disabling this configure test will create a broken FFmpeg."
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
MR
57show_help(){
58 echo "Usage: configure [options]"
59 echo "Options: [defaults in brackets after descriptions]"
60 echo
61 echo "Standard options:"
62 echo " --help print this message"
8c6afa4d
DB
63 echo " --logfile=FILE log tests and output to FILE [config.err]"
64 echo " --disable-logging do not log configure debug information"
3e89171a 65 echo " --prefix=PREFIX install in PREFIX [$prefix]"
d156bede 66 echo " --bindir=DIR install binaries in DIR [PREFIX/bin]"
14a8acf1 67 echo " --datadir=DIR install data files in DIR [PREFIX/share/ffmpeg]"
74c53c2d 68 echo " --libdir=DIR install libs in DIR [PREFIX/lib]"
84c22efd 69 echo " --shlibdir=DIR install shared libs in DIR [PREFIX/lib]"
5341d856 70 echo " --incdir=DIR install includes in DIR [PREFIX/include]"
4ca5ece5 71 echo " --mandir=DIR install man page in DIR [PREFIX/share/man]"
62560865
DB
72 echo
73 echo "Configuration options:"
e6b9d588
DB
74 echo " --disable-static do not build static libraries [no]"
75 echo " --enable-shared build shared libraries [no]"
0a23c0bb
DB
76 echo " --enable-gpl allow use of GPL code, the resulting libs"
77 echo " and binaries will be under GPL [no]"
9cad0e4e 78 echo " --enable-version3 upgrade (L)GPL to version 3 [no]"
0a23c0bb
DB
79 echo " --enable-nonfree allow use of nonfree code, the resulting libs"
80 echo " and binaries will be unredistributable [no]"
62560865
DB
81 echo " --disable-ffmpeg disable ffmpeg build"
82 echo " --disable-ffplay disable ffplay build"
83 echo " --disable-ffserver disable ffserver build"
e6b9d588 84 echo " --enable-postproc enable GPLed postprocessing support [no]"
fdf11906 85 echo " --enable-avfilter video filter support [no]"
0a23c0bb 86 echo " --enable-avfilter-lavf video filters dependent on avformat [no]"
e6b9d588
DB
87 echo " --enable-beosthreads use BeOS threads [no]"
88 echo " --enable-os2threads use OS/2 threads [no]"
89 echo " --enable-pthreads use pthreads [no]"
90 echo " --enable-w32threads use Win32 threads [no]"
91 echo " --enable-x11grab enable X11 grabbing [no]"
62560865
DB
92 echo " --disable-network disable network support [no]"
93 echo " --disable-ipv6 disable IPv6 support [no]"
94 echo " --disable-mpegaudio-hp faster (but less accurate) MPEG audio decoding [no]"
95 echo " --enable-gray enable full grayscale support (slower color)"
a9ddb5b1 96 echo " --disable-swscale-alpha disable alpha channel support in swscale"
aa033b1e 97 echo " --disable-fastdiv disable table-based division"
62560865
DB
98 echo " --enable-small optimize for size instead of speed"
99 echo " --disable-aandct disable AAN DCT code"
100 echo " --disable-fft disable FFT code"
101 echo " --disable-golomb disable Golomb code"
102 echo " --disable-mdct disable MDCT code"
68602540 103 echo " --disable-rdft disable RDFT code"
17492d5e
DB
104 echo " --disable-vaapi disable VAAPI code"
105 echo " --disable-vdpau disable VDPAU code"
e90f5b5a 106 echo " --enable-runtime-cpudetect detect cpu capabilities at runtime (bigger binary)"
62560865
DB
107 echo " --enable-hardcoded-tables use hardcoded tables instead of runtime generation"
108 echo " --enable-memalign-hack emulate memalign, interferes with memory debuggers"
109 echo " --enable-beos-netserver enable BeOS netserver"
110 echo " --disable-encoder=NAME disable encoder NAME"
111 echo " --enable-encoder=NAME enable encoder NAME"
112 echo " --disable-encoders disable all encoders"
113 echo " --disable-decoder=NAME disable decoder NAME"
114 echo " --enable-decoder=NAME enable decoder NAME"
115 echo " --disable-decoders disable all decoders"
5666fd73
GB
116 echo " --disable-hwaccel=NAME disable hwaccel NAME"
117 echo " --enable-hwaccel=NAME enable hwaccel NAME"
118 echo " --disable-hwaccels disable all hwaccels"
62560865
DB
119 echo " --disable-muxer=NAME disable muxer NAME"
120 echo " --enable-muxer=NAME enable muxer NAME"
121 echo " --disable-muxers disable all muxers"
122 echo " --disable-demuxer=NAME disable demuxer NAME"
123 echo " --enable-demuxer=NAME enable demuxer NAME"
124 echo " --disable-demuxers disable all demuxers"
125 echo " --enable-parser=NAME enable parser NAME"
126 echo " --disable-parser=NAME disable parser NAME"
127 echo " --disable-parsers disable all parsers"
128 echo " --enable-bsf=NAME enable bitstream filter NAME"
129 echo " --disable-bsf=NAME disable bitstream filter NAME"
130 echo " --disable-bsfs disable all bitstream filters"
131 echo " --enable-protocol=NAME enable protocol NAME"
132 echo " --disable-protocol=NAME disable protocol NAME"
133 echo " --disable-protocols disable all protocols"
134 echo " --disable-indevs disable input devices"
135 echo " --disable-outdevs disable output devices"
136 echo " --disable-devices disable all devices"
137 echo " --enable-filter=NAME enable filter NAME"
138 echo " --disable-filter=NAME disable filter NAME"
139 echo " --disable-filters disable all filters"
140 echo " --list-decoders show all available decoders"
141 echo " --list-encoders show all available encoders"
5666fd73 142 echo " --list-hwaccels show all available hardware accelerators"
62560865
DB
143 echo " --list-muxers show all available muxers"
144 echo " --list-demuxers show all available demuxers"
145 echo " --list-parsers show all available parsers"
146 echo " --list-protocols show all available protocols"
147 echo " --list-bsfs show all available bitstream filters"
148 echo " --list-indevs show all available input devices"
149 echo " --list-outdevs show all available output devices"
150 echo " --list-filters show all available filters"
0a622b98
MR
151 echo
152 echo "External library support:"
0a23c0bb 153 echo " --enable-avisynth enable reading of AVISynth script files [no]"
27cb5cbc
CEH
154 echo " --enable-bzlib enable bzlib [autodetect]"
155 echo " --enable-libamr-nb enable libamr-nb floating point audio codec [no]"
156 echo " --enable-libamr-wb enable libamr-wb floating point audio codec [no]"
0b175caa
DB
157 echo " --enable-libopencore-amrnb enable AMR-NB de/encoding via libopencore-amrnb [no]"
158 echo " --enable-libopencore-amrwb enable AMR-WB decoding via libopencore-amrwb [no]"
f7b8bffe 159 echo " --enable-libdc1394 enable IIDC-1394 grabbing using libdc1394"
e6b9d588
DB
160 echo " and libraw1394 [no]"
161 echo " --enable-libdirac enable Dirac support via libdirac [no]"
162 echo " --enable-libfaac enable FAAC support via libfaac [no]"
163 echo " --enable-libfaad enable FAAD support via libfaad [no]"
164 echo " --enable-libfaadbin open libfaad.so.0 at runtime [no]"
165 echo " --enable-libgsm enable GSM support via libgsm [no]"
166 echo " --enable-libmp3lame enable MP3 encoding via libmp3lame [no]"
31235134 167 echo " --enable-libnut enable NUT (de)muxing via libnut,"
0a23c0bb 168 echo " native (de)muxer exists [no]"
9a77d59a 169 echo " --enable-libopenjpeg enable JPEG 2000 decoding via OpenJPEG [no]"
e6b9d588
DB
170 echo " --enable-libschroedinger enable Dirac support via libschroedinger [no]"
171 echo " --enable-libspeex enable Speex decoding via libspeex [no]"
172 echo " --enable-libtheora enable Theora encoding via libtheora [no]"
f9def9cc 173 echo " --enable-libvorbis enable Vorbis encoding via libvorbis,"
e6b9d588
DB
174 echo " native implementation exists [no]"
175 echo " --enable-libx264 enable H.264 encoding via x264 [no]"
1cc60c47 176 echo " --enable-libxvid enable Xvid encoding via xvidcore,"
e6b9d588 177 echo " native MPEG-4/Xvid encoder exists [no]"
732c9a34 178 echo " --enable-mlib enable Sun medialib [no]"
27cb5cbc 179 echo " --enable-zlib enable zlib [autodetect]"
74c53c2d
MR
180 echo ""
181 echo "Advanced options (experts only):"
182 echo " --source-path=PATH path to source code [$source_path]"
183 echo " --cross-prefix=PREFIX use PREFIX for compilation tools [$cross_prefix]"
db6107b6 184 echo " --enable-cross-compile assume a cross-compiler is used"
c5200f17
MR
185 echo " --sysroot=PATH root of cross-build tree"
186 echo " --sysinclude=PATH location of cross-build system headers"
4f854758 187 echo " --target-os=OS compiler targets OS [$target_os]"
a7ada2ba
MR
188 echo " --target-exec=CMD command to run executables on target"
189 echo " --target-path=DIR path to view of build directory on target"
89641463 190 echo " --nm=NM use nm tool"
313c46a6 191 echo " --as=AS use assembler AS [$as_default]"
15396d5c 192 echo " --cc=CC use C compiler CC [$cc_default]"
9da6609f
MR
193 echo " --host-cc=HOSTCC use host C compiler HOSTCC"
194 echo " --host-cflags=HCFLAGS use HCFLAGS when compiling for host"
195 echo " --host-ldflags=HLDFLAGS use HLDFLAGS when linking for host"
196 echo " --host-libs=HLIBS use libs HLIBS when linking for host"
74c53c2d
MR
197 echo " --extra-cflags=ECFLAGS add ECFLAGS to CFLAGS [$CFLAGS]"
198 echo " --extra-ldflags=ELDFLAGS add ELDFLAGS to LDFLAGS [$LDFLAGS]"
199 echo " --extra-libs=ELIBS add ELIBS [$ELIBS]"
ac63af34 200 echo " --extra-version=STRING version string suffix []"
0a23c0bb
DB
201 echo " --build-suffix=SUFFIX library name suffix []"
202 echo " --arch=ARCH select architecture [$arch]"
203 echo " --cpu=CPU select the minimum required CPU (affects"
7c758d33 204 echo " instruction selection, may crash on older CPUs)"
2b4c3615 205 echo " --enable-powerpc-perf enable performance report on PPC"
74c53c2d 206 echo " (requires enabling PMC)"
4f50c3d5 207 echo " --disable-altivec disable AltiVec optimizations"
3bf96eec 208 echo " --disable-amd3dnow disable 3DNow! optimizations"
a1ef9f08 209 echo " --disable-amd3dnowext disable 3DNow! extended optimizations"
0a23c0bb
DB
210 echo " --disable-mmx disable MMX optimizations"
211 echo " --disable-mmx2 disable MMX2 optimizations"
1bb04d5a 212 echo " --disable-sse disable SSE optimizations"
0a23c0bb
DB
213 echo " --disable-ssse3 disable SSSE3 optimizations"
214 echo " --disable-armv5te disable armv5te optimizations"
215 echo " --disable-armv6 disable armv6 optimizations"
26c7aa17 216 echo " --disable-armv6t2 disable armv6t2 optimizations"
3bbcba32 217 echo " --disable-armvfp disable ARM VFP optimizations"
0a23c0bb 218 echo " --disable-iwmmxt disable iwmmxt optimizations"
49276307
DB
219 echo " --disable-mmi disable MMI optimizations"
220 echo " --disable-neon disable neon optimizations"
221 echo " --disable-vis disable VIS optimizations"
7595a5e4 222 echo " --disable-yasm disable use of yasm assembler"
0a622b98
MR
223 echo
224 echo "Developer options (useful when working on FFmpeg itself):"
9c56a1f9 225 echo " --disable-debug disable debugging symbols"
b7d49373 226 echo " --enable-debug=LEVEL set the debug level [$debuglevel]"
0a622b98 227 echo " --enable-gprof enable profiling with gprof [$gprof]"
d2bbb2f7 228 echo " --disable-optimizations disable compiler optimizations"
0a622b98 229 echo " --enable-extra-warnings enable more compiler warnings"
87a0fb62 230 echo " --disable-stripping disable stripping of executables and shared libraries"
74c53c2d
MR
231 echo ""
232 echo "NOTE: Object files are built at the place where configure is launched."
60e8bc13 233 exit 0
74c53c2d 234}
cf9d24ad 235
57bd82d4 236log(){
2270b4b2 237 echo "$@" >> $logfile
57bd82d4
MR
238}
239
720c69da 240log_file(){
c8e9f801 241 log BEGIN $1
2270b4b2 242 pr -n -t $1 >> $logfile
c8e9f801
MR
243 log END $1
244}
245
2ba042a7 246echolog(){
c8e9f801 247 log "$@"
57bd82d4 248 echo "$@"
2ba042a7
MR
249}
250
251die(){
252 echolog "$@"
253 cat <<EOF
d326cf7f 254
2ba042a7
MR
255If you think configure made a mistake, make sure you are using the latest
256version from SVN. If the latest version fails, report the problem to the
e5d8ccd7 257ffmpeg-user@mplayerhq.hu mailing list or IRC #ffmpeg on irc.freenode.net.
2ba042a7 258EOF
e155a21a 259 if disabled logging; then
2ba042a7 260 cat <<EOF
e155a21a
DB
261Rerun configure with logging enabled (do not use --disable-logging), and
262include the log this produces with your report.
2ba042a7
MR
263EOF
264 else
265cat <<EOF
e155a21a
DB
266Include the log file "$logfile" produced by configure as this will help
267solving the problem.
2ba042a7
MR
268EOF
269 fi
57bd82d4
MR
270 exit 1
271}
272
6c6007d6 273# Avoid locale weirdness, besides we really just want to translate ASCII.
44161118 274toupper(){
6c6007d6 275 echo "$@" | tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ
44161118
MR
276}
277
4a5444db 278tolower(){
6c6007d6 279 echo "$@" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz
4a5444db
MR
280}
281
14a8acf1
MR
282c_escape(){
283 echo "$*" | sed 's/["\\]/\\\0/g'
284}
285
b04251c5
MR
286sh_quote(){
287 v=$(echo "$1" | sed "s/'/'\\\\''/g")
288 test "$v" = "${v#*[ |&;<>()$\`\\\"\'*?\[\]#~=%]}" || v="'$v'"
289 echo "$v"
290}
291
a8d04fba
MR
292set_all(){
293 value=$1
294 shift
295 for var in $*; do
296 eval $var=$value
297 done
298}
299
72a43668
MR
300set_weak(){
301 value=$1
302 shift
303 for var; do
304 eval : \${$var:=$value}
305 done
306}
307
799c9e9b
MR
308pushvar(){
309 for var in $*; do
310 eval level=\${${var}_level:=0}
311 eval ${var}_${level}="\$$var"
312 eval ${var}_level=$(($level+1))
313 done
314}
315
316popvar(){
317 for var in $*; do
318 eval level=\${${var}_level:-0}
319 test $level = 0 && continue
320 eval level=$(($level-1))
321 eval $var="\${${var}_${level}}"
322 eval ${var}_level=$level
323 eval unset ${var}_${level}
324 done
325}
326
a8d04fba
MR
327enable(){
328 set_all yes $*
329}
330
331disable(){
332 set_all no $*
333}
334
72a43668
MR
335enable_weak(){
336 set_weak yes $*
337}
338
339disable_weak(){
340 set_weak no $*
341}
342
72702705
MR
343enable_safe(){
344 enable $(echo "$*" | sed 's/[^A-Za-z0-9_ ]/_/g')
345}
346
347disable_safe(){
348 disable $(echo "$*" | sed 's/[^A-Za-z0-9_ ]/_/g')
349}
350
f9d328da
MR
351do_enable_deep(){
352 for var; do
353 enabled $var && continue
354 eval sel="\$${var}_select"
c510c7b5
MR
355 eval sgs="\$${var}_suggest"
356 pushvar var sgs
f9d328da 357 enable_deep $sel
c510c7b5
MR
358 popvar sgs
359 enable_deep_weak $sgs
f9d328da
MR
360 popvar var
361 done
362}
363
364enable_deep(){
365 do_enable_deep $*
366 enable $*
367}
368
72a43668
MR
369enable_deep_weak(){
370 do_enable_deep $*
371 enable_weak $*
372}
373
57bd82d4 374enabled(){
3250003c
MR
375 test "${1#!}" = "$1" && op== || op=!=
376 eval test "x\$${1#!}" $op "xyes"
44161118
MR
377}
378
37970ebf 379disabled(){
3250003c
MR
380 test "${1#!}" = "$1" && op== || op=!=
381 eval test "x\$${1#!}" $op "xno"
37970ebf
RP
382}
383
44161118
MR
384enabled_all(){
385 for opt; do
386 enabled $opt || return 1
387 done
388}
389
85bca2c5
DB
390disabled_all(){
391 for opt; do
392 disabled $opt || return 1
393 done
394}
395
44161118
MR
396enabled_any(){
397 for opt; do
398 enabled $opt && return 0
399 done
400}
401
85bca2c5
DB
402disabled_any(){
403 for opt; do
404 disabled $opt && return 0
405 done
f7b230a7 406 return 1
85bca2c5
DB
407}
408
c9d19248
MR
409set_default(){
410 for opt; do
88268e94 411 eval : \${$opt:=\$${opt}_default}
c9d19248
MR
412 done
413}
414
4a0d6686
AJ
415is_in(){
416 value=$1
417 shift
418 for var in $*; do
419 [ $var = $value ] && return 0
420 done
421 return 1
422}
423
30fd06be
MR
424check_deps(){
425 for cfg; do
3250003c 426 cfg="${cfg#!}"
799c9e9b
MR
427 enabled ${cfg}_checking && die "Circular dependency for $cfg."
428 disabled ${cfg}_checking && continue
429 enable ${cfg}_checking
430
30fd06be
MR
431 eval dep_all="\$${cfg}_deps"
432 eval dep_any="\$${cfg}_deps_any"
7ef3425f 433 eval dep_sel="\$${cfg}_select"
c510c7b5 434 eval dep_sgs="\$${cfg}_suggest"
799c9e9b 435
c510c7b5
MR
436 pushvar cfg dep_all dep_any dep_sel dep_sgs
437 check_deps $dep_all $dep_any $dep_sel $dep_sgs
438 popvar cfg dep_all dep_any dep_sel dep_sgs
799c9e9b 439
6a702d4c
MR
440 enabled_all $dep_all || disable $cfg
441 enabled_any $dep_any || disable $cfg
7ef3425f 442 disabled_any $dep_sel && disable $cfg
799c9e9b 443
4ec45764
RP
444 if enabled $cfg; then
445 eval dep_extralibs="\$${cfg}_extralibs"
446 test -n "$dep_extralibs" && add_extralibs $dep_extralibs
f9d328da 447 enable_deep $dep_sel
c510c7b5 448 enable_deep_weak $dep_sgs
4ec45764
RP
449 fi
450
799c9e9b 451 disable ${cfg}_checking
30fd06be
MR
452 done
453}
454
44161118
MR
455print_config(){
456 pfx=$1
457 header=$2
458 makefile=$3
459 shift 3
460 for cfg; do
5e622c40 461 ucname="$(toupper $cfg)"
44161118 462 if enabled $cfg; then
3d907e22 463 echo "#define ${pfx}${ucname} 1" >> $header
3d907e22
MR
464 echo "${pfx}${ucname}=yes" >> $makefile
465 else
b250f9c6 466 echo "#define ${pfx}${ucname} 0" >> $header
44161118
MR
467 fi
468 done
57bd82d4
MR
469}
470
471flags_saved(){
2270b4b2 472 (: ${SAVE_CFLAGS?}) 2> /dev/null
57bd82d4
MR
473}
474
dcd479c0 475save_flags(){
57bd82d4 476 flags_saved && return
dcd479c0
MR
477 SAVE_CFLAGS="$CFLAGS"
478 SAVE_LDFLAGS="$LDFLAGS"
479 SAVE_extralibs="$extralibs"
480}
481
482restore_flags(){
f5d28d10 483 flags_saved || return
dcd479c0
MR
484 CFLAGS="$SAVE_CFLAGS"
485 LDFLAGS="$SAVE_LDFLAGS"
486 extralibs="$SAVE_extralibs"
487 unset SAVE_CFLAGS
488 unset SAVE_LDFLAGS
489 unset SAVE_extralibs
490}
491
492temp_cflags(){
493 save_flags
494 CFLAGS="$CFLAGS $*"
495}
496
497temp_ldflags(){
498 save_flags
499 LDFLAGS="$LDFLAGS $*"
500}
501
502temp_extralibs(){
503 save_flags
504 extralibs="$extralibs $*"
505}
506
57bd82d4
MR
507append(){
508 var=$1
509 shift
510 flags_saved && eval "SAVE_$var=\"\$SAVE_$var $*\""
511 eval "$var=\"\$$var $*\""
512}
513
514add_cflags(){
515 append CFLAGS "$@"
516}
517
518add_ldflags(){
519 append LDFLAGS "$@"
520}
521
522add_extralibs(){
523 append extralibs "$@"
524}
525
b0cfb663 526check_cmd(){
b3cb5d51 527 log "$@"
2270b4b2 528 "$@" >> $logfile 2>&1
b0cfb663
MR
529}
530
dcd479c0 531check_cc(){
57bd82d4 532 log check_cc "$@"
2270b4b2 533 cat > $TMPC
720c69da 534 log_file $TMPC
b0cfb663 535 check_cmd $cc $CFLAGS "$@" -c -o $TMPO $TMPC
57bd82d4
MR
536}
537
538check_cpp(){
539 log check_cpp "$@"
2270b4b2 540 cat > $TMPC
720c69da 541 log_file $TMPC
b0cfb663 542 check_cmd $cc $CFLAGS "$@" -E -o $TMPO $TMPC
dcd479c0
MR
543}
544
f65883c8
MR
545check_as(){
546 log check_as "$@"
547 cat > $TMPC
548 log_file $TMPC
549 check_cmd $as $CFLAGS "$@" -c -o $TMPO $TMPC
550}
551
940f335a
MR
552check_asm(){
553 log check_asm "$@"
554 name="$1"
555 asm="$2"
556 shift 2
f65883c8 557 check_as "$@" <<EOF && enable $name || disable $name
124c21d7 558void foo(void){ __asm__ volatile($asm); }
940f335a
MR
559EOF
560}
561
304d586d
LM
562check_yasm(){
563 log check_yasm "$@"
564 echo "$1" > $TMPS
565 log_file $TMPS
566 shift 1
567 check_cmd $yasmexe $YASMFLAGS "$@" -o $TMPO $TMPS
568}
569
dcd479c0 570check_ld(){
57bd82d4 571 log check_ld "$@"
0607887f 572 check_cc || return
3155a644
MR
573 flags=''
574 libs=''
575 for f; do
576 test "${f}" = "${f#-l}" && flags="$flags $f" || libs="$libs $f"
577 done
578 check_cmd $cc $LDFLAGS $flags -o $TMPE $TMPO $extralibs $libs
dcd479c0
MR
579}
580
581check_cflags(){
57bd82d4
MR
582 log check_cflags "$@"
583 check_cc "$@" <<EOF && add_cflags "$@"
dcd479c0
MR
584int x;
585EOF
586}
587
588check_ldflags(){
57bd82d4
MR
589 log check_ldflags "$@"
590 check_ld "$@" <<EOF && add_ldflags "$@"
c23a0ac8 591int main(void){ return 0; }
dcd479c0
MR
592EOF
593}
594
595check_header(){
57bd82d4 596 log check_header "$@"
dcd479c0
MR
597 header=$1
598 shift
b77df637
MR
599 disable_safe $header
600 check_cpp "$@" <<EOF && enable_safe $header
dcd479c0
MR
601#include <$header>
602int x;
603EOF
604}
605
606check_func(){
57bd82d4 607 log check_func "$@"
dcd479c0
MR
608 func=$1
609 shift
d8bc5f06
MR
610 disable $func
611 check_ld "$@" <<EOF && enable $func
dcd479c0 612extern int $func();
c23a0ac8 613int main(void){ $func(); }
dcd479c0
MR
614EOF
615}
616
2446d3d6
DB
617check_func_headers(){
618 log check_func_headers "$@"
f8d7b072
MR
619 headers=$1
620 func=$2
621 shift 2
622 disable $func
623 incs=""
624 for hdr in $headers; do
625 incs="$incs
626#include <$hdr>"
627 done
cd0d9a9d 628 check_ld "$@" <<EOF && enable $func && enable_safe $headers
f8d7b072 629$incs
d6773f56 630int main(int argc, char **argv){
f8d7b072
MR
631 (void) $func;
632 return 0;
633}
634EOF
635}
636
a5344cf7
SS
637check_cpp_condition(){
638 log check_cpp_condition "$@"
639 header=$1
640 condition=$2
641 check_cpp <<EOF
642#include <$header>
643#if !($condition)
644#error "unsatisfied condition: $condition"
645#endif
646EOF
647}
648
57bd82d4
MR
649check_lib(){
650 log check_lib "$@"
651 header="$1"
652 func="$2"
653 shift 2
fcfcde17
MR
654 temp_extralibs "$@"
655 check_header $header && check_func $func && add_extralibs "$@"
656 err=$?
657 restore_flags
658 return $err
57bd82d4
MR
659}
660
f8d7b072
MR
661check_lib2(){
662 log check_lib2 "$@"
663 headers="$1"
664 func="$2"
665 shift 2
666 temp_extralibs "$@"
2446d3d6 667 check_func_headers "$headers" $func && add_extralibs "$@"
f8d7b072
MR
668 err=$?
669 restore_flags
670 return $err
671}
672
dcd479c0 673check_exec(){
2270b4b2 674 check_ld "$@" && { enabled cross_compile || $TMPE >> $logfile 2>&1; }
57bd82d4
MR
675}
676
7dfef245 677check_exec_crash(){
5e622c40 678 code=$(cat)
7dfef245
MR
679
680 # exit() is not async signal safe. _Exit (C99) and _exit (POSIX)
681 # are safe but may not be available everywhere. Thus we use
682 # raise(SIGTERM) instead. The check is run in a subshell so we
683 # can redirect the "Terminated" message from the shell. SIGBUS
684 # is not defined by standard C so it is used conditionally.
685
2270b4b2 686 (check_exec "$@") >> $logfile 2>&1 <<EOF
7dfef245
MR
687#include <signal.h>
688static void sighandler(int sig){
689 raise(SIGTERM);
690}
e5af4a11 691int main(void){
7dfef245
MR
692 signal(SIGILL, sighandler);
693 signal(SIGFPE, sighandler);
694 signal(SIGSEGV, sighandler);
695#ifdef SIGBUS
696 signal(SIGBUS, sighandler);
697#endif
698 { $code }
699}
700EOF
701}
702
72be9e73
DY
703check_type(){
704 log check_type "$@"
705 headers=$1
706 type=$2
707 shift 2
708 disable $type
709 incs=""
710 for hdr in $headers; do
711 incs="$incs
712#include <$hdr>"
713 done
714 check_cc "$@" <<EOF && enable $type
715$incs
716$type v;
717EOF
718}
719
57bd82d4
MR
720require(){
721 name="$1"
722 header="$2"
723 func="$3"
724 shift 3
725 check_lib $header $func "$@" || die "ERROR: $name not found"
dcd479c0
MR
726}
727
f8d7b072
MR
728require2(){
729 name="$1"
730 headers="$2"
731 func="$3"
732 shift 3
733 check_lib2 "$headers" $func "$@" || die "ERROR: $name not found"
734}
735
eea50282
MR
736check_foo_config(){
737 cfg=$1
738 pkg=$2
739 header=$3
740 func=$4
741 shift 4
742 disable $cfg
743 check_cmd ${pkg}-config --version
744 err=$?
745 if test "$err" = 0; then
5e622c40
DB
746 temp_cflags $(${pkg}-config --cflags)
747 temp_extralibs $(${pkg}-config --libs)
eea50282
MR
748 check_lib "$@" $header $func && enable $cfg
749 fi
750 return $err
751}
752
c505dd31
MR
753apply(){
754 file=$1
755 shift
756 "$@" < "$file" > "$file.tmp" && mv "$file.tmp" "$file" || rm "$file.tmp"
757}
758
dcd61286
DB
759# CONFIG_LIST contains configurable options, while HAVE_LIST is for
760# system-dependent things.
761
4a0d6686
AJ
762COMPONENT_LIST="
763 bsfs
764 decoders
765 demuxers
766 encoders
3cde40aa 767 filters
5666fd73 768 hwaccels
c552605c 769 indevs
4a0d6686 770 muxers
c552605c 771 outdevs
4a0d6686
AJ
772 parsers
773 protocols
774"
775
776CONFIG_LIST="
777 $COMPONENT_LIST
e8ed9b7a 778 aandct
f7679c54
VS
779 avfilter
780 avfilter_lavf
c88f5d72
MR
781 avisynth
782 beos_netserver
f402916e 783 bzlib
27a9466b 784 fastdiv
c88f5d72
MR
785 ffmpeg
786 ffplay
787 ffserver
1848f7d9 788 fft
4f034993 789 golomb
c88f5d72 790 gpl
ecfc4f44 791 gprof
d8d0d0b2 792 gray
3abe5fbd 793 hardcoded_tables
c88f5d72 794 ipv6
f5a756ef
DB
795 libamr_nb
796 libamr_wb
f7b8bffe 797 libdc1394
690bfceb 798 libdirac
2eed5a46
DB
799 libfaac
800 libfaad
801 libfaadbin
c88f5d72 802 libgsm
6ebe07fb 803 libmp3lame
c88f5d72 804 libnut
0b175caa
DB
805 libopencore_amrnb
806 libopencore_amrwb
9a77d59a 807 libopenjpeg
f7cd9eed 808 libschroedinger
ae14f311 809 libspeex
150d2772 810 libtheora
c88f5d72 811 libvorbis
1cc60c47
DB
812 libx264
813 libxvid
47a158cb 814 mdct
c88f5d72 815 memalign_hack
a8150374 816 mlib
c88f5d72
MR
817 mpegaudio_hp
818 network
3fe142e2 819 nonfree
4a24ab64 820 postproc
2b4c3615 821 powerpc_perf
68602540 822 rdft
e90f5b5a 823 runtime_cpudetect
2e35e684 824 shared
bd2216e4 825 small
2e35e684 826 static
a9ddb5b1 827 swscale_alpha
17492d5e
DB
828 vaapi
829 vdpau
9cad0e4e 830 version3
56a059ac 831 x11grab
c88f5d72 832 zlib
4a0d6686 833"
c88f5d72 834
8eee7025
DB
835THREADS_LIST='
836 beosthreads
d22e8442 837 os2threads
8eee7025
DB
838 pthreads
839 w32threads
840'
841
3f5b56e5
MR
842ARCH_LIST='
843 alpha
a2fc0f6a 844 arm
3f5b56e5
MR
845 bfin
846 ia64
847 m68k
848 mips
bae3abb0 849 mips64
3f5b56e5 850 parisc
79cb09b2 851 ppc
34d11b87 852 ppc64
3f5b56e5
MR
853 s390
854 sh4
855 sparc
856 sparc64
857 x86
858 x86_32
859 x86_64
860'
861
862ARCH_EXT_LIST='
1ac9331a 863 altivec
3bf96eec 864 amd3dnow
a1ef9f08 865 amd3dnowext
1ac9331a 866 armv5te
edab3048 867 armv6
ab5cb084 868 armv6t2
f55b299a 869 armvfp
3f5b56e5
MR
870 iwmmxt
871 mmi
872 mmx
d7f0920b 873 mmx2
6b18d278 874 neon
799fde37 875 ppc4xx
1bb04d5a 876 sse
9eeed841 877 ssse3
bd9d34a0 878 vis
3f5b56e5
MR
879'
880
881HAVE_LIST="
882 $ARCH_EXT_LIST
883 $THREADS_LIST
35fd8122 884 alsa_asoundlib_h
3f5b56e5 885 altivec_h
c9fdab0d 886 arpa_inet_h
08a85a59 887 bigendian
6bd859d6 888 bswap
ecf97f22 889 closesocket
1ac9331a 890 cmov
e16e49ac 891 conio_h
c88f5d72 892 dcbzl
f8aa696f
DB
893 dev_bktr_ioctl_bt848_h
894 dev_bktr_ioctl_meteor_h
895 dev_ic_bt8xx_h
896 dev_video_meteor_ioctl_meteor_h
897 dev_video_bktr_ioctl_bt848_h
18b67ae5 898 dlfcn_h
c88f5d72 899 dlopen
bc574408 900 dos_paths
245626d0
DB
901 ebp_available
902 ebx_available
c2a29455 903 fast_64bit
7073e9fc 904 fast_cmov
7b829d2a 905 fast_unaligned
9d99cc5a 906 fork
da9e86f8 907 gethrtime
4e68cb8a 908 GetProcessTimes
66be5b45 909 getrusage
2e1913b1 910 inet_aton
61d251db 911 inline_asm
9f5ff83f 912 ldbrx
0b4a1821
AS
913 libdc1394_1
914 libdc1394_2
a33cab3a 915 llrint
85dd97ad 916 loongson
a33cab3a 917 lrint
c88f5d72 918 lrintf
e4673692 919 lzo1x_999_compress
f8aa696f
DB
920 machine_ioctl_bt848_h
921 machine_ioctl_meteor_h
c88f5d72
MR
922 malloc_h
923 memalign
6ffa87d3 924 mkstemp
b4e806b2 925 pld
1f91cdce 926 posix_memalign
a33cab3a
MK
927 round
928 roundf
c88f5d72
MR
929 sdl
930 sdl_video_size
b507ebd1 931 setmode
72be9e73 932 socklen_t
deb29777 933 soundcard_h
f8cda19e 934 poll_h
b58412f1 935 sys_mman_h
b091aa44 936 sys_resource_h
81644c2e 937 sys_select_h
deb29777 938 sys_soundcard_h
1b6e8b73 939 sys_videoio_h
d3a4b4e0 940 ten_operands
e16e49ac 941 termios_h
b265431e 942 threads
7b04b8a0 943 truncf
7c5bfe7a 944 VirtualAlloc
6ff3f3e7 945 winsock2_h
cc078b5d 946 xform_asm
304d586d 947 yasm
0cb78cef 948"
44161118 949
b6bb00b0
MR
950# options emitted with CONFIG_ prefix but not available on command line
951CONFIG_EXTRA="
9cad0e4e
DB
952 gplv3
953 lgplv3
b6bb00b0
MR
954"
955
520cc7f1 956CMDLINE_SELECT="
3f5b56e5 957 $ARCH_EXT_LIST
520cc7f1 958 $CONFIG_LIST
8eee7025 959 $THREADS_LIST
db6107b6 960 cross_compile
520cc7f1
MR
961 debug
962 extra_warnings
8c6afa4d 963 logging
d2bbb2f7 964 optimizations
87a0fb62 965 stripping
7595a5e4 966 yasm
520cc7f1 967"
426be5dc
DB
968
969PATHS_LIST='
d156bede 970 bindir
14a8acf1 971 datadir
26759c44
MR
972 incdir
973 libdir
26759c44
MR
974 mandir
975 prefix
976 shlibdir
426be5dc
DB
977'
978
979CMDLINE_SET="
980 $PATHS_LIST
981 arch
313c46a6 982 as
426be5dc
DB
983 build_suffix
984 cc
985 cpu
986 cross_prefix
ac63af34 987 extra_version
9da6609f
MR
988 host_cc
989 host_cflags
990 host_ldflags
991 host_libs
82bb3329 992 host_os
426be5dc 993 logfile
89641463 994 nm
26759c44 995 source_path
c5200f17
MR
996 sysinclude
997 sysroot
a7ada2ba 998 target_exec
26759c44 999 target_os
a7ada2ba 1000 target_path
426be5dc 1001"
520cc7f1 1002
912f3148
DB
1003# code dependency declarations
1004
9eeed841 1005# architecture extensions
79cb09b2 1006altivec_deps="ppc"
3bf96eec 1007amd3dnow_deps="mmx"
a1ef9f08 1008amd3dnowext_deps="amd3dnow"
a2fc0f6a
MR
1009armv5te_deps="arm"
1010armv6_deps="arm"
ab5cb084 1011armv6t2_deps="arm"
a2fc0f6a
MR
1012armvfp_deps="arm"
1013iwmmxt_deps="arm"
e241ba14 1014mmi_deps="mips"
9eeed841 1015mmx_deps="x86"
75aa95a6 1016mmx2_deps="mmx"
a2fc0f6a 1017neon_deps="arm"
799fde37 1018ppc4xx_deps="ppc"
75aa95a6
DB
1019sse_deps="mmx"
1020ssse3_deps="sse"
bd9d34a0 1021vis_deps="sparc"
9eeed841 1022
5666fd73 1023# decoders / encoders / hardware accelerators
47a158cb 1024aac_decoder_select="fft mdct"
47a158cb
MR
1025ac3_decoder_select="fft mdct"
1026atrac3_decoder_select="fft mdct"
4f034993 1027cavs_decoder_select="golomb"
47a158cb 1028cook_decoder_select="fft mdct"
2eef7c62 1029cscd_decoder_suggest="zlib"
47a158cb 1030dca_decoder_select="fft mdct"
e8ed9b7a 1031dnxhd_encoder_select="aandct"
2eef7c62 1032dxa_decoder_select="zlib"
47a158cb 1033eac3_decoder_select="fft mdct"
e8ed9b7a 1034eatgq_decoder_select="aandct"
d52b39c7 1035eatqi_decoder_select="aandct"
4f034993
MR
1036ffv1_decoder_select="golomb"
1037flac_decoder_select="golomb"
1038flac_encoder_select="golomb"
2eef7c62
AJ
1039flashsv_decoder_select="zlib"
1040flashsv_encoder_select="zlib"
e8ed9b7a
DB
1041flv_encoder_select="aandct"
1042h261_encoder_select="aandct"
1043h263_encoder_select="aandct"
ff418735 1044h263_vaapi_hwaccel_deps="va_va_h"
17492d5e 1045h263_vaapi_hwaccel_select="vaapi"
e8ed9b7a 1046h263p_encoder_select="aandct"
4f034993 1047h264_decoder_select="golomb"
ff418735 1048h264_vaapi_hwaccel_deps="va_va_h"
17492d5e 1049h264_vaapi_hwaccel_select="vaapi"
711dae77 1050h264_vdpau_decoder_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
17492d5e 1051h264_vdpau_decoder_select="vdpau"
47a158cb 1052imc_decoder_select="fft mdct"
4f034993
MR
1053jpegls_decoder_select="golomb"
1054jpegls_encoder_select="golomb"
e8ed9b7a 1055ljpeg_encoder_select="aandct"
4f034993 1056loco_decoder_select="golomb"
e8ed9b7a
DB
1057mjpeg_encoder_select="aandct"
1058mpeg1video_encoder_select="aandct"
1059mpeg2video_encoder_select="aandct"
1060mpeg4_encoder_select="aandct"
711dae77 1061mpeg_vdpau_decoder_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
17492d5e 1062mpeg_vdpau_decoder_select="vdpau"
711dae77 1063mpeg1_vdpau_decoder_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
17492d5e 1064mpeg1_vdpau_decoder_select="vdpau"
ff418735 1065mpeg2_vaapi_hwaccel_deps="va_va_h"
17492d5e 1066mpeg2_vaapi_hwaccel_select="vaapi"
ff418735 1067mpeg4_vaapi_hwaccel_deps="va_va_h"
17492d5e 1068mpeg4_vaapi_hwaccel_select="vaapi"
8f6f050a 1069mpeg_xvmc_decoder_deps="X11_extensions_XvMClib_h"
e8ed9b7a
DB
1070msmpeg4v1_encoder_select="aandct"
1071msmpeg4v2_encoder_select="aandct"
1072msmpeg4v3_encoder_select="aandct"
47a158cb
MR
1073nellymoser_decoder_select="fft mdct"
1074nellymoser_encoder_select="fft mdct"
2eef7c62
AJ
1075png_decoder_select="zlib"
1076png_encoder_select="zlib"
63cae55d 1077qdm2_decoder_select="fft mdct rdft"
e8ed9b7a
DB
1078rv10_encoder_select="aandct"
1079rv20_encoder_select="aandct"
d52b39c7
AJ
1080rv30_decoder_select="golomb"
1081rv40_decoder_select="golomb"
4f034993
MR
1082shorten_decoder_select="golomb"
1083sonic_decoder_select="golomb"
1084sonic_encoder_select="golomb"
1085sonic_ls_encoder_select="golomb"
1086svq3_decoder_select="golomb"
bee2eac5 1087svq3_decoder_suggest="zlib"
2eef7c62
AJ
1088tiff_decoder_suggest="zlib"
1089tiff_encoder_suggest="zlib"
1090tscc_decoder_select="zlib"
ff418735 1091vc1_vaapi_hwaccel_deps="va_va_h"
17492d5e 1092vc1_vaapi_hwaccel_select="vaapi"
711dae77 1093vc1_vdpau_decoder_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
17492d5e 1094vc1_vdpau_decoder_select="vdpau"
47a158cb
MR
1095vorbis_decoder_select="fft mdct"
1096vorbis_encoder_select="fft mdct"
1097wmav1_decoder_select="fft mdct"
1098wmav1_encoder_select="fft mdct"
1099wmav2_decoder_select="fft mdct"
1100wmav2_encoder_select="fft mdct"
e8ed9b7a
DB
1101wmv1_encoder_select="aandct"
1102wmv2_encoder_select="aandct"
ff418735 1103wmv3_vaapi_hwaccel_deps="va_va_h"
17492d5e 1104wmv3_vaapi_hwaccel_select="vaapi"
711dae77 1105wmv3_vdpau_decoder_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
17492d5e 1106wmv3_vdpau_decoder_select="vdpau"
2eef7c62
AJ
1107zlib_decoder_select="zlib"
1108zlib_encoder_select="zlib"
1109zmbv_decoder_select="zlib"
1110zmbv_encoder_select="zlib"
30fd06be 1111
28b80940
DB
1112# parsers
1113h264_parser_select="golomb"
1114
912f3148 1115# external libraries
f5a756ef
DB
1116libamr_nb_decoder_deps="libamr_nb"
1117libamr_nb_encoder_deps="libamr_nb"
1118libamr_wb_decoder_deps="libamr_wb"
1119libamr_wb_encoder_deps="libamr_wb"
1b71f045 1120libdirac_decoder_deps="libdirac !libschroedinger"
690bfceb 1121libdirac_encoder_deps="libdirac"
c9171a83 1122libfaac_encoder_deps="libfaac"
69ddbd1d 1123libfaad_decoder_deps="libfaad"
4ec45764 1124libfaadbin_decoder_extralibs='$ldl'
299c77d5
MR
1125libgsm_decoder_deps="libgsm"
1126libgsm_encoder_deps="libgsm"
8ffed8d8
MR
1127libgsm_ms_decoder_deps="libgsm"
1128libgsm_ms_encoder_deps="libgsm"
1cc60c47 1129libmp3lame_encoder_deps="libmp3lame"
0b175caa
DB
1130libopencore_amrnb_decoder_deps="libopencore_amrnb"
1131libopencore_amrnb_encoder_deps="libopencore_amrnb"
1132libopencore_amrwb_decoder_deps="libopencore_amrwb"
9a77d59a 1133libopenjpeg_decoder_deps="libopenjpeg"
f7cd9eed
AS
1134libschroedinger_decoder_deps="libschroedinger"
1135libschroedinger_encoder_deps="libschroedinger"
ae14f311 1136libspeex_decoder_deps="libspeex"
150d2772 1137libtheora_encoder_deps="libtheora"
b0caf888 1138libvorbis_encoder_deps="libvorbis"
1cc60c47
DB
1139libx264_encoder_deps="libx264"
1140libxvid_encoder_deps="libxvid"
30fd06be 1141
912f3148 1142# demuxers / muxers
03a76ba9 1143ac3_demuxer_deps="ac3_parser"
35fd8122
NG
1144alsa_demuxer_deps="alsa_asoundlib_h snd_pcm_htimestamp"
1145alsa_demuxer_extralibs="-lasound"
1146alsa_muxer_deps="alsa_asoundlib_h"
1147alsa_muxer_extralibs="-lasound"
50383e88 1148audio_beos_demuxer_deps="audio_beos"
4ec45764 1149audio_beos_demuxer_extralibs="-lmedia -lbe"
50383e88 1150audio_beos_muxer_deps="audio_beos"
4ec45764 1151audio_beos_muxer_extralibs="-lmedia -lbe"
53b73365 1152avisynth_demuxer_deps="avisynth"
73483024 1153bktr_demuxer_deps_any="dev_bktr_ioctl_bt848_h machine_ioctl_bt848_h dev_video_bktr_ioctl_bt848_h dev_ic_bt8xx_h"
17ac9f1c 1154dirac_demuxer_deps="dirac_parser"
fe9bb347 1155dv1394_demuxer_deps="dv1394 dv_demuxer"
80ff8a16
OG
1156jack_demuxer_deps="jack_jack_h"
1157jack_demuxer_extralibs="-ljack"
f7b8bffe 1158libdc1394_demuxer_deps="libdc1394"
d7c59247
DB
1159libnut_demuxer_deps="libnut"
1160libnut_muxer_deps="libnut"
2eef7c62
AJ
1161matroska_demuxer_suggest="zlib bzlib"
1162mov_demuxer_suggest="zlib"
4bd8e17c 1163mp3_demuxer_deps="mpegaudio_parser"
c7682de0
RP
1164oss_demuxer_deps_any="soundcard_h sys_soundcard_h"
1165oss_muxer_deps_any="soundcard_h sys_soundcard_h"
30fd06be 1166redir_demuxer_deps="network"
8eb793c4 1167rtp_muxer_deps="network rtp_protocol"
95c21842
LA
1168rtsp_demuxer_deps="sdp_demuxer"
1169sdp_demuxer_deps="rtp_protocol mpegts_demuxer"
06e31011 1170v4l_demuxer_deps="linux_videodev_h"
1b6e8b73 1171v4l2_demuxer_deps_any="linux_videodev2_h sys_videoio_h"
c2345207
RP
1172vfwcap_demuxer_deps="capCreateCaptureWindow"
1173vfwcap_demuxer_extralibs="-lvfw32"
06eab4ba 1174x11_grab_device_demuxer_deps="x11grab XShmCreateImage"
4ec45764 1175x11_grab_device_demuxer_extralibs="-lX11 -lXext"
30fd06be 1176
912f3148 1177# protocols
3fff6382 1178gopher_protocol_deps="network"
c08fb000
AB
1179http_protocol_deps="network"
1180rtp_protocol_deps="udp_protocol"
1181tcp_protocol_deps="network"
1182udp_protocol_deps="network"
1183
f7679c54 1184# filters
81124ba0 1185movie_filter_deps="avfilter_lavf"
f7679c54 1186
912f3148 1187# programs
fa859b4d 1188ffplay_deps="sdl"
6ad42348 1189ffserver_deps="ffm_muxer rtp_protocol rtsp_demuxer"
4ec45764 1190ffserver_extralibs='$ldl'
a2830dca 1191
912f3148 1192
de6d9b64 1193# default parameters
8a608357 1194
2ba042a7 1195logfile="config.err"
8a608357
MR
1196
1197# installation paths
c9d19248
MR
1198prefix_default="/usr/local"
1199bindir_default='${prefix}/bin'
14a8acf1 1200datadir_default='${prefix}/share/ffmpeg'
c9d19248
MR
1201incdir_default='${prefix}/include'
1202libdir_default='${prefix}/lib'
1203mandir_default='${prefix}/share/man'
1204shlibdir_default="$libdir_default"
8a608357
MR
1205
1206# toolchain
11e6d03a 1207ar="ar"
13c7df3d 1208cc_default="gcc"
9da6609f 1209host_cc_default="gcc"
11e6d03a 1210ln_s="ln -sf"
89641463 1211nm_default="nm"
11e6d03a 1212objformat="elf"
be7109c1 1213ranlib="ranlib"
0f3cb305 1214strip="strip"
11e6d03a 1215yasmexe="yasm"
8a608357
MR
1216
1217# machine
5e622c40 1218arch=$(uname -m)
38d0a8aa 1219cpu="generic"
8a608357 1220
8a608357 1221# OS
4f854758 1222target_os=$(tolower $(uname -s))
82bb3329 1223host_os=$target_os
8a608357 1224
8a608357 1225# configurable options
497237c7 1226enable debug
aa033b1e 1227enable fastdiv
497237c7
RP
1228enable ffmpeg
1229enable ffplay
1230enable ffserver
1231enable ipv6
497237c7
RP
1232enable mpegaudio_hp
1233enable network
8400d6b8 1234enable optimizations
497237c7 1235enable protocols
530dc538 1236enable static
87a0fb62 1237enable stripping
a9ddb5b1 1238enable swscale_alpha
8a608357 1239
8a608357 1240# build settings
11a9d3e8 1241add_cflags -D_ISOC99_SOURCE -D_POSIX_C_SOURCE=200112
9987769a 1242SHFLAGS='-shared -Wl,-soname,$$(@F)'
c536cb09 1243FFSERVERLDFLAGS=-Wl,-E
f3ec2d46
SG
1244LIBPREF="lib"
1245LIBSUF=".a"
c5f14466
RP
1246FULLNAME='$(NAME)$(BUILDSUF)'
1247LIBNAME='$(LIBPREF)$(FULLNAME)$(LIBSUF)'
f3ec2d46
SG
1248SLIBPREF="lib"
1249SLIBSUF=".so"
c5f14466 1250SLIBNAME='$(SLIBPREF)$(FULLNAME)$(SLIBSUF)'
b29bddab
DB
1251SLIBNAME_WITH_VERSION='$(SLIBNAME).$(LIBVERSION)'
1252SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
24743a76 1253LIB_INSTALL_EXTRA_CMD='$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
ef0bc4c9 1254
9da6609f
MR
1255host_cflags='-O3 -g -Wall'
1256host_libs='-lm'
1257
a7ada2ba
MR
1258target_path='.'
1259
0d7dca36
DB
1260# gcc stupidly only outputs the basename of targets with -MM, but we need the
1261# full relative path for objects in subdirectories for non-recursive Make.
333d5374 1262DEPEND_CMD='$(CC) $(CFLAGS) -MM $< | sed -e "/^\#.*/d" -e "s,^[[:space:]]*$(*F)\\.o,$(@D)/$(*F).o,"'
315c741d 1263
c597172e 1264# find source path
5e622c40 1265source_path="$(dirname "$0")"
497237c7 1266enable source_path_used
c597172e 1267if test -z "$source_path" -o "$source_path" = "." ; then
5e622c40 1268 source_path="$(pwd)"
497237c7 1269 disable source_path_used
c597172e 1270else
5e622c40 1271 source_path="$(cd "$source_path"; pwd)"
c597172e 1272 echo "$source_path" | grep -q '[[:blank:]]' &&
7483e694 1273 die "Out of tree builds are impossible with whitespace in source path."
337cee68
MC
1274 test -e "$source_path/config.h" &&
1275 die "Out of tree builds are impossible with config.h in source dir."
c597172e
MR
1276fi
1277
13cbe2c0 1278for v in "$@"; do
b04251c5
MR
1279 r=${v#*=}
1280 l=${v%"$r"}
1281 r=$(sh_quote "$r")
13cbe2c0
MR
1282 FFMPEG_CONFIGURATION="${FFMPEG_CONFIGURATION# } ${l}${r}"
1283done
c597172e 1284
73ef8980
MR
1285find_things(){
1286 thing=$1
1287 pattern=$2
1288 file=$source_path/$3
932ccf39 1289 sed -n "s/^[^#]*$pattern.*([^,]*, *\([^,]*\)\(,.*\)*).*/\1_$thing/p" "$file"
73ef8980
MR
1290}
1291
1292ENCODER_LIST=$(find_things encoder ENC libavcodec/allcodecs.c)
1293DECODER_LIST=$(find_things decoder DEC libavcodec/allcodecs.c)
5666fd73 1294HWACCEL_LIST=$(find_things hwaccel HWACCEL libavcodec/allcodecs.c)
73ef8980
MR
1295PARSER_LIST=$(find_things parser PARSER libavcodec/allcodecs.c)
1296BSF_LIST=$(find_things bsf BSF libavcodec/allcodecs.c)
1297MUXER_LIST=$(find_things muxer _MUX libavformat/allformats.c)
1298DEMUXER_LIST=$(find_things demuxer DEMUX libavformat/allformats.c)
1299OUTDEV_LIST=$(find_things muxer _MUX libavdevice/alldevices.c)
1300INDEV_LIST=$(find_things demuxer DEMUX libavdevice/alldevices.c)
1301PROTOCOL_LIST=$(find_things protocol PROTOCOL libavformat/allformats.c)
81124ba0 1302FILTER_LIST=$(find_things filter FILTER libavfilter/allfilters.c)
c597172e 1303
7483e694
DB
1304enable $ARCH_EXT_LIST \
1305 $DECODER_LIST \
1306 $ENCODER_LIST \
5666fd73 1307 $HWACCEL_LIST \
7483e694
DB
1308 $PARSER_LIST \
1309 $BSF_LIST \
1310 $DEMUXER_LIST \
1311 $MUXER_LIST \
f7679c54 1312 $FILTER_LIST \
7483e694
DB
1313 $PROTOCOL_LIST \
1314 $INDEV_LIST \
1315 $OUTDEV_LIST \
c597172e
MR
1316
1317die_unknown(){
1318 echo "Unknown option \"$1\"."
1319 echo "See $0 --help for available options."
1320 exit 1
1321}
1322
794f8e97 1323show_list() {
bf0c4afa
RP
1324 suffix=_$1
1325 shift
1326 echo $* | sed s/$suffix//g | tr ' ' '\n' | sort
794f8e97
PI
1327 exit 0
1328}
1329
c597172e 1330for opt do
7483e694
DB
1331 optval="${opt#*=}"
1332 case "$opt" in
0f010b2f 1333 --extra-cflags=*) add_cflags $optval
7483e694 1334 ;;
0f010b2f 1335 --extra-ldflags=*) add_ldflags $optval
7483e694 1336 ;;
0f010b2f 1337 --extra-libs=*) add_extralibs $optval
7483e694 1338 ;;
8fb1cb58 1339 --disable-devices) disable $INDEV_LIST $OUTDEV_LIST
9aa8ed9d 1340 ;;
40bcf4c7
BL
1341 --enable-debug=*) debuglevel="$optval"
1342 ;;
7483e694 1343 --enable-*=*|--disable-*=*)
5e622c40 1344 eval $(echo "$opt" | sed 's/=/-/;s/--/action=/;s/-/ thing=/;s/-/ name=/')
7483e694 1345 case "$thing" in
5666fd73 1346 encoder|decoder|hwaccel|muxer|demuxer|parser|bsf|protocol|filter) $action ${optval}_${thing} ;;
7483e694
DB
1347 *) die_unknown "$opt" ;;
1348 esac
1349 ;;
1350 --enable-?*|--disable-?*)
5e622c40 1351 eval $(echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g')
e3773a55
MR
1352 if is_in $option $COMPONENT_LIST; then
1353 eval $action \$$(toupper ${option%s})_LIST
1354 elif is_in $option $CMDLINE_SELECT; then
1355 $action $option
1356 else
1357 die_unknown $opt
1358 fi
7483e694
DB
1359 ;;
1360 --list-*)
1361 NAME="${opt#--list-}"
1362 is_in $NAME $COMPONENT_LIST || die_unknown $opt
1363 NAME=${NAME%s}
1364 eval show_list $NAME \$$(toupper $NAME)_LIST
1365 ;;
1366 --help|-h) show_help
1367 ;;
1368 *)
884a36a7 1369 optname="${opt%%=*}"
26759c44
MR
1370 optname="${optname#--}"
1371 optname=$(echo "$optname" | sed 's/-/_/g')
1372 is_in $optname $CMDLINE_SET || die_unknown $opt
1373 eval $optname='$optval'
7483e694
DB
1374 ;;
1375 esac
c597172e
MR
1376done
1377
bcea99bb
MR
1378disabled logging && logfile=/dev/null
1379
13cbe2c0 1380echo "# $0 $FFMPEG_CONFIGURATION" > $logfile
bcea99bb
MR
1381set >> $logfile
1382
9da6609f
MR
1383test -n "$cross_prefix" && enable cross_compile
1384
adb2b908 1385ar="${cross_prefix}${ar}"
11e6d03a 1386cc_default="${cross_prefix}${cc_default}"
20e0ed95 1387nm_default="${cross_prefix}${nm_default}"
adb2b908
RP
1388ranlib="${cross_prefix}${ranlib}"
1389strip="${cross_prefix}${strip}"
1390
c5200f17
MR
1391sysinclude_default="${sysroot}/usr/include"
1392
75800dce
MR
1393set_default cc nm sysinclude
1394as_default=$cc
9da6609f
MR
1395enabled cross_compile || host_cc_default=$cc
1396set_default host_cc
13c7df3d 1397
82bb3329
MR
1398exesuf() {
1399 case $1 in
1400 mingw32*|cygwin*|*-dos|freedos|opendos|os/2*) echo .exe ;;
1401 esac
1402}
1403
1404EXESUF=$(exesuf $target_os)
1405HOSTEXESUF=$(exesuf $host_os)
c0f5b7f1 1406
e4e69e0b 1407# set temporary file name
a49d42c2 1408: ${TMPDIR:=$TEMPDIR}
c51fafa1 1409: ${TMPDIR:=$TMP}
a49d42c2 1410: ${TMPDIR:=/tmp}
e4e69e0b 1411
54460a83
MR
1412if ! check_cmd type mktemp; then
1413 # simple replacement for missing mktemp
1414 # NOT SAFE FOR GENERAL USE
1415 mktemp(){
1416 echo "${2%XXX*}.${HOSTNAME}.${UID}.$$"
1417 }
1418fi
1419
1420tmpfile(){
1421 tmp=$(mktemp -u "${TMPDIR}/ffconf.XXXXXXXX")$2 &&
1422 (set -C; exec > $tmp) 2>/dev/null ||
1423 die "Unable to create temoporary file in $TMPDIR."
1424 append TMPFILES $tmp
1425 eval $1=$tmp
1426}
1427
1428trap 'rm -f -- $TMPFILES' EXIT
1429trap exit HUP INT TERM
1430
1431tmpfile TMPC .c
1432tmpfile TMPE $EXESUF
1433tmpfile TMPH .h
1434tmpfile TMPO .o
1435tmpfile TMPS .S
1436tmpfile TMPSH .sh
1437
1438unset -f mktemp
e4e69e0b 1439
993f2d0f
MR
1440# make sure we can execute files in $TMPDIR
1441cat > $TMPSH 2>> $logfile <<EOF
1442#! /bin/sh
1443EOF
1444chmod +x $TMPSH >> $logfile 2>&1
1445if ! $TMPSH >> $logfile 2>&1; then
1446 cat <<EOF
1447Unable to create and execute files in $TMPDIR. Set the TMPDIR environment
1448variable to another directory and make sure that it is not mounted noexec.
1449EOF
1450 die "Sanity test failed."
1451fi
993f2d0f 1452
3a636b6f 1453if $cc --version 2>/dev/null | grep -qi gcc; then
629687f6
MR
1454 cc_type=gcc
1455elif $cc --version 2>/dev/null | grep -q Intel; then
1456 cc_type=icc
1457elif $cc -v 2>&1 | grep -q xlc; then
1458 cc_type=xlc
df442a8d
MR
1459elif $cc -V 2>/dev/null | grep -q Compaq; then
1460 cc_type=ccc
1461 DEPEND_CMD='$(CC) $(CFLAGS) -M $< | sed -e "/^\#.*/d" -e "s,^[[:space:]]*$(*F)\\.o,$(@D)/$(*F).o,"'
03754fcd 1462 debuglevel=3
df442a8d 1463 add_ldflags -Wl,-z,now # calls to libots crash without this
03e37762
MR
1464elif $cc --vsn 2>/dev/null | grep -q RVCT; then
1465 test -d "$sysroot" || die "No valid sysroot specified."
1466 cc_type=armcc
1467 armcc_conf="$PWD/armcc.conf"
1468 $cc --arm_linux_configure \
1469 --arm_linux_config_file="$armcc_conf" \
1470 --configure_sysroot="$sysroot" \
1471 --configure_cpp_headers="$sysinclude" >>$logfile 2>&1 ||
1472 die "Error creating armcc configuration file."
1473 cc="$cc --arm_linux_config_file=$armcc_conf --translate_gcc"
75800dce 1474 as_default="${cross_prefix}gcc"
629687f6
MR
1475fi
1476
1477test -n "$cc_type" && enable $cc_type || echolog "Unknown C compiler $cc"
1478
75800dce
MR
1479set_default as
1480
154d432c
MR
1481if test -n "$sysroot"; then
1482 case "$cc_type" in
1483 gcc)
1484 add_cflags --sysroot="$sysroot"
1485 add_ldflags --sysroot="$sysroot"
1486 ;;
1487 esac
1488fi
1489
993f2d0f
MR
1490# compiler sanity check
1491check_exec <<EOF
1492int main(void){ return 0; }
1493EOF
1494if test "$?" != 0; then
1495 echo "$cc is unable to create an executable file."
1496 if test -z "$cross_prefix" && ! enabled cross_compile ; then
1497 echo "If $cc is a cross-compiler, use the --enable-cross-compile option."
1498 echo "Only do this if you know what cross compiling means."
1499 fi
1500 die "C compiler test failed."
1501fi
1502
e9b9a2f8 1503check_cflags -std=c99
9d821fc2
DB
1504check_cc -D_FILE_OFFSET_BITS=64 <<EOF && add_cflags -D_FILE_OFFSET_BITS=64
1505#include <stdlib.h>
1506EOF
1507check_cc -D_LARGEFILE_SOURCE <<EOF && add_cflags -D_LARGEFILE_SOURCE
1508#include <stdlib.h>
1509EOF
e9b9a2f8 1510
b24dbcbd 1511case "$arch" in
b24dbcbd
RP
1512 alpha)
1513 arch="alpha"
1514 enable fast_64bit
c0a02a3e 1515 check_cflags -mieee
b24dbcbd 1516 ;;
cfdb6148
MR
1517 arm|armv[4567]*l)
1518 arch="arm"
b24dbcbd 1519 ;;
f4870943
MR
1520 avr32)
1521 ;;
cfdb6148
MR
1522 bfin)
1523 arch="bfin"
1524 ;;
1525 ia64)
1526 arch="ia64"
b24dbcbd 1527 enable fast_64bit
cfdb6148
MR
1528 ;;
1529 m68k)
1530 arch="m68k"
b24dbcbd 1531 ;;
de3a1240 1532 mips|mipsel|IP*)
b24dbcbd
RP
1533 arch="mips"
1534 ;;
de3a1240
DB
1535 mips64)
1536 arch="mips"
bae3abb0 1537 subarch="mips64"
de3a1240
DB
1538 enable fast_64bit
1539 ;;
61597a98 1540 parisc|hppa)
b24dbcbd
RP
1541 arch="parisc"
1542 ;;
61597a98 1543 parisc64|hppa64)
b24dbcbd
RP
1544 arch="parisc"
1545 enable fast_64bit
1546 ;;
cfdb6148
MR
1547 "Power Macintosh"|ppc|powerpc)
1548 arch="ppc"
1549 enable fast_unaligned
1550 ;;
1551 ppc64)
1552 arch="ppc"
34d11b87 1553 subarch="ppc64"
cfdb6148
MR
1554 enable fast_64bit
1555 enable fast_unaligned
1556 ;;
b24dbcbd
RP
1557 s390|s390x)
1558 arch="s390"
1559 ;;
cfdb6148
MR
1560 sh4|sh)
1561 arch="sh4"
b24dbcbd 1562 ;;
cfdb6148
MR
1563 sparc)
1564 arch="sparc"
1565 ;;
1566 sun4u|sparc64)
1567 arch="sparc"
1568 subarch="sparc64"
b24dbcbd
RP
1569 enable fast_64bit
1570 ;;
cfdb6148
MR
1571 i386|i486|i586|i686|i86pc|BePC)
1572 arch="x86"
1573 subarch="x86_32"
1574 enable fast_unaligned
1575 ;;
1576 x86_64|amd64)
1577 arch="x86"
1578 subarch="x86_32"
1579 enable cmov
1580 enable fast_cmov
1581 enable fast_unaligned
1582 check_cc <<EOF && enable fast_64bit && subarch="x86_64"
1583 int test[sizeof(char*) - 7];
1584EOF
b24dbcbd
RP
1585 ;;
1586 *)
1587 arch="unknown"
1588 ;;
1589esac
1590
62045d48 1591enable $arch $subarch
b24dbcbd 1592
7483e694 1593# OS specific
4f854758 1594case $target_os in
7483e694 1595 beos|haiku|zeta)
c9d19248 1596 prefix_default="$HOME/config"
7483e694 1597 # helps building libavcodec
0f010b2f 1598 add_cflags -DPIC -fomit-frame-pointer
7483e694 1599 # 3 gcc releases known for BeOS, each with ugly bugs
5e622c40 1600 gcc_version="$($cc -v 2>&1 | grep version | cut -d ' ' -f3-)"
7483e694
DB
1601 case "$gcc_version" in
1602 2.9-beos-991026*|2.9-beos-000224*) echo "R5/GG gcc"
1603 disable mmx
1604 ;;
1605 *20010315*) echo "BeBits gcc"
0f010b2f 1606 add_cflags -fno-expensive-optimizations
7483e694
DB
1607 ;;
1608 esac
7483e694
DB
1609 SHFLAGS=-nostart
1610 # enable BeOS things
1611 enable audio_beos
1612 # no need for libm, but the inet stuff
1613 # Check for BONE
1614 # XXX: actually should check for NOT net_server
78fe7631 1615 if echo $BEINCLUDES | grep -q 'headers/be/bone'; then
7483e694
DB
1616 network_extralibs="-lbind -lsocket"
1617 else
1618 enable beos_netserver
1619 network_extralibs="-lnet"
1620 fi ;;
1621 sunos)
1622 FFSERVERLDFLAGS=""
9987769a 1623 SHFLAGS='-shared -Wl,-h,$$(@F)'
7483e694 1624 network_extralibs="-lsocket -lnsl"
e193c74e 1625 add_cflags -D__EXTENSIONS__
7483e694
DB
1626 ;;
1627 netbsd)
1628 oss_demuxer_extralibs="-lossaudio"
1629 oss_muxer_extralibs="-lossaudio"
1630 ;;
1631 openbsd)
1632 disable need_memalign
1633 LIBOBJFLAGS='$(PIC)'
7483e694 1634 SHFLAGS='-shared'
7483e694
DB
1635 oss_demuxer_extralibs="-lossaudio"
1636 oss_muxer_extralibs="-lossaudio"
1637 ;;
90b4f091 1638 freebsd|dragonfly)
7483e694
DB
1639 disable need_memalign
1640 ;;
1641 bsd/os)
1642 osextralibs="-lpoll -lgnugetopt"
1643 strip="strip -d"
1644 ;;
1645 darwin)
1646 disable need_memalign
0138c54e 1647 SHFLAGS='-dynamiclib -Wl,-single_module -Wl,-install_name,$(SHLIBDIR)/$(SLIBNAME),-current_version,$(LIBVERSION),-compatibility_version,$(LIBMAJOR) -Wl,-read_only_relocs,suppress'
7483e694
DB
1648 strip="strip -x"
1649 FFLDFLAGS="-Wl,-dynamic,-search_paths_first"
1650 SLIBSUF=".dylib"
1651 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME).$(LIBVERSION)$(SLIBSUF)'
1652 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME).$(LIBMAJOR)$(SLIBSUF)'
1653 FFSERVERLDFLAGS=-Wl,-bind_at_load
304d586d 1654 objformat="macho"
1b0f6fb8 1655 enabled x86_64 && objformat="macho64"
7483e694
DB
1656 ;;
1657 mingw32*)
4f854758 1658 target_os=mingw32
dcc01c06 1659 LIBTARGET=i386
1fc9fb8a 1660 if enabled x86_64; then
dcc01c06
RP
1661 disable need_memalign
1662 LIBTARGET=x64
1663 fi
fbd971a4 1664 shlibdir_default="$bindir_default"
7483e694
DB
1665 disable ffserver
1666 SLIBPREF=""
1667 SLIBSUF=".dll"
7483e694
DB
1668 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
1669 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
06abe7f5 1670 SLIB_EXTRA_CMD='-lib.exe /machine:$(LIBTARGET) /def:$$(@:$(SLIBSUF)=.def) /out:$(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib)'
4c25d159
RP
1671 SLIB_INSTALL_EXTRA_CMD='-install -m 644 $(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib) "$(SHLIBDIR)/$(SLIBNAME:$(SLIBSUF)=.lib)"; \
1672 install -m 644 $(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib) "$(SHLIBDIR)/$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib)"'
7483e694 1673 SLIB_UNINSTALL_EXTRA_CMD='rm -f "$(SHLIBDIR)/$(SLIBNAME:$(SLIBSUF)=.lib)"'
4b51fb1c 1674 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 1675 objformat="win32"
bc574408 1676 enable dos_paths
1894e741 1677 check_cflags -fno-common
b1549d61 1678 if ! enabled x86_64; then
f7ad5aa2
RP
1679 check_cpp_condition _mingw.h "(__MINGW32_MAJOR_VERSION > 3) || (__MINGW32_MAJOR_VERSION == 3 && __MINGW32_MINOR_VERSION >= 15)" ||
1680 die "ERROR: MinGW runtime version must be >= 3.15."
1681 enabled_any avisynth vfwcap_demuxer &&
1682 { check_cpp_condition w32api.h "(__W32API_MAJOR_VERSION > 3) || (__W32API_MAJOR_VERSION == 3 && __W32API_MINOR_VERSION >= 13)" ||
1683 die "ERROR: avisynth and vfwcap_demuxer require w32api version 3.13 or later."; }
1684 fi
7483e694
DB
1685 ;;
1686 cygwin*)
4f854758 1687 target_os=cygwin
fbd971a4 1688 shlibdir_default="$bindir_default"
7483e694
DB
1689 SLIBPREF="cyg"
1690 SLIBSUF=".dll"
1691 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
1692 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
1693 SHFLAGS='-shared -Wl,--enable-auto-image-base'
304d586d 1694 objformat="win32"
bc574408 1695 enable dos_paths
1894e741 1696 check_cflags -fno-common
7483e694 1697 ;;
4f365f37 1698 *-dos|freedos|opendos)
fdf11906 1699 disable ffplay ffserver
4f365f37
MK
1700 disable $INDEV_LIST $OUTDEV_LIST
1701 network_extralibs="-lsocket"
ff1c015d 1702 objformat="coff"
bc574408 1703 enable dos_paths
4f365f37 1704 ;;
7483e694 1705 linux)
7483e694
DB
1706 enable dv1394
1707 ;;
1708 irix*)
4f854758 1709 target_os=irix
7483e694
DB
1710 ranlib="echo ignoring ranlib"
1711 ;;
d22e8442 1712 os/2*)
d22e8442
DY
1713 strip="lxlite"
1714 ln_s="cp -f"
d22e8442 1715 FFLDFLAGS="-Zomf -Zbin-files -Zargs-wild -Zmap"
71c61f62 1716 SHFLAGS='$(SUBDIR)$(NAME).def -Zdll -Zomf'
d22e8442 1717 FFSERVERLDFLAGS=""
287d3b13 1718 LIBSUF="_s.a"
d22e8442
DY
1719 SLIBPREF=""
1720 SLIBSUF=".dll"
1721 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)'
1722 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(shell echo $(NAME) | cut -c1-6)$(LIBMAJOR)$(SLIBSUF)'
71c61f62
MR
1723 SLIB_CREATE_DEF_CMD='echo LIBRARY $(SLIBNAME_WITH_MAJOR) INITINSTANCE TERMINSTANCE > $(SUBDIR)$(NAME).def; \
1724 echo PROTMODE >> $(SUBDIR)$(NAME).def; \
1725 echo CODE PRELOAD MOVEABLE DISCARDABLE >> $(SUBDIR)$(NAME).def; \
1726 echo DATA PRELOAD MOVEABLE MULTIPLE NONSHARED >> $(SUBDIR)$(NAME).def; \
1727 echo EXPORTS >> $(SUBDIR)$(NAME).def; \
1728 emxexp -o $(OBJS) >> $(SUBDIR)$(NAME).def'
1729 SLIB_EXTRA_CMD='emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(NAME).def; \
1730 emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib $(SUBDIR)$(NAME).def;'
1731 SLIB_INSTALL_EXTRA_CMD='install -m 644 $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib "$(LIBDIR)"'
d22e8442 1732 SLIB_UNINSTALL_EXTRA_CMD='rm -f "$(LIBDIR)"/$(LIBPREF)$(NAME)_dll.a "$(LIBDIR)"/$(LIBPREF)$(NAME)_dll.lib'
bc574408 1733 enable dos_paths
d22e8442 1734 ;;
83993c1c
AM
1735 gnu/kfreebsd)
1736 ;;
34e82167 1737 gnu)
34e82167 1738 ;;
d22e8442 1739
7483e694 1740 *)
4f924f9a 1741 die "Unknown OS '$target_os'."
7483e694
DB
1742 ;;
1743esac
1744
c9d19248
MR
1745set_default $PATHS_LIST
1746
c597172e 1747add_extralibs $osextralibs
de6d9b64 1748
28d8e661
DB
1749# Combine FFLDFLAGS and the LDFLAGS environment variable.
1750LDFLAGS="$FFLDFLAGS $LDFLAGS"
e89b8b0a 1751
320d060a 1752# we need to build at least one lib type
93b3c083 1753if ! enabled_any static shared; then
320d060a
DB
1754 cat <<EOF
1755At least one library type must be built.
1756Specify --enable-static to build the static libraries or --enable-shared to
1757build the shared libraries as well. To only build the shared libraries specify
1758--disable-static in addition to --enable-shared.
1759EOF
1760 exit 1;
1761fi
1762
abc4e572 1763disabled static && LIBNAME=""
2a320695 1764
a2234ceb
RP
1765if enabled_any libfaad libfaadbin ; then
1766 if check_header faad.h; then
295b8c70 1767 check_cc <<EOF
a2234ceb
RP
1768#include <faad.h>
1769#ifndef FAAD2_VERSION
1770ok faad1
1771#endif
db817cf3 1772int main(void) { return 0; }
a2234ceb
RP
1773EOF
1774 test $? = 0 && enable libfaad2
1775 else
ff3dac65 1776 die "FAAD test failed."
a2234ceb
RP
1777 fi
1778fi
1779
1780
2184c6f7 1781die_license_disabled() {
4c27207c 1782 enabled $1 || { enabled $2 && die "$2 is $1 and --enable-$1 is not specified."; }
2184c6f7
DB
1783}
1784
1785die_license_disabled gpl libfaad2
1786die_license_disabled gpl libx264
1787die_license_disabled gpl libxvid
1788die_license_disabled gpl postproc
1789die_license_disabled gpl x11grab
1790
1791die_license_disabled nonfree libamr_nb
1792die_license_disabled nonfree libamr_wb
2f7ae63b 1793die_license_disabled nonfree libfaac
b2e3c528 1794
0b175caa
DB
1795die_license_disabled version3 libopencore_amrnb
1796die_license_disabled version3 libopencore_amrwb
1797
9cad0e4e 1798enabled version3 && { enabled gpl && enable gplv3 || enable lgplv3; }
3fe142e2 1799
9eeed841 1800check_deps $ARCH_EXT_LIST
0f3cb305 1801
5d323602
MR
1802test -z "$need_memalign" && need_memalign="$mmx"
1803
cf9d24ad 1804#Darwin CC versions
4f854758 1805if test $target_os = darwin; then
629687f6 1806 if enabled xlc; then
0f010b2f 1807 add_cflags -qpdf2 -qlanglvl=extc99 -qmaxmem=-1 -qarch=auto -qtune=auto
cf9d24ad 1808 else
0f010b2f
DB
1809 add_cflags -pipe
1810 check_cflags -force_cpusubtype_ALL
1811 check_cflags -Wno-sign-compare
f946a9a4 1812 enabled shared || check_cflags -mdynamic-no-pic
cf9d24ad 1813 fi
2a1a6b64
MN
1814fi
1815
40617a6d 1816disabled optimizations || check_cflags -fomit-frame-pointer
cf9d24ad 1817
a4adb608 1818# Add processor-specific flags
38d0a8aa 1819if test $cpu != "generic"; then
bc8ec47b
MR
1820 warn_altivec(){
1821 $1 altivec && echo "WARNING: Tuning for $2 but AltiVec $1.";
1658bc4f 1822 }
38d0a8aa 1823 case $cpu in
bb270c08 1824 601|ppc601|PowerPC601)
0f010b2f 1825 add_cflags -mcpu=601
bc8ec47b 1826 warn_altivec enabled PPC601
bb270c08
DB
1827 ;;
1828 603*|ppc603*|PowerPC603*)
0f010b2f 1829 add_cflags -mcpu=603
bc8ec47b 1830 warn_altivec enabled PPC603
bb270c08
DB
1831 ;;
1832 604*|ppc604*|PowerPC604*)
0f010b2f 1833 add_cflags -mcpu=604
bc8ec47b 1834 warn_altivec enabled PPC604
bb270c08
DB
1835 ;;
1836 G3|g3|75*|ppc75*|PowerPC75*)
0f010b2f 1837 add_cflags -mcpu=750 -mpowerpc-gfxopt
bc8ec47b 1838 warn_altivec enabled PPC75x
bb270c08
DB
1839 ;;
1840 G4|g4|745*|ppc745*|PowerPC745*)
0f010b2f 1841 add_cflags -mcpu=7450 -mpowerpc-gfxopt
bc8ec47b 1842 warn_altivec disabled PPC745x
bb270c08
DB
1843 ;;
1844 74*|ppc74*|PowerPC74*)
0f010b2f 1845 add_cflags -mcpu=7400 -mpowerpc-gfxopt
bc8ec47b 1846 warn_altivec disabled PPC74xx
bb270c08
DB
1847 ;;
1848 G5|g5|970|ppc970|PowerPC970|power4*|Power4*)
0f010b2f 1849 add_cflags -mcpu=970 -mpowerpc-gfxopt -mpowerpc64
bc8ec47b 1850 warn_altivec disabled PPC970
bb270c08 1851 ;;
e07e357d 1852 Cell|CELL|cell)
0f010b2f 1853 add_cflags -mcpu=cell
e07e357d 1854 warn_altivec disabled Cell
34d11b87 1855 enable ldbrx
e07e357d 1856 ;;
e7768fc5
GP
1857 # targets that do NOT support conditional mov (cmov)
1858 i[345]86|pentium|pentium-mmx|k6|k6-[23]|winchip-c6|winchip2|c3)
0f010b2f 1859 add_cflags -march=$cpu
497237c7 1860 disable cmov
e7768fc5
GP
1861 ;;
1862 # targets that do support conditional mov (cmov)
416519dd 1863 i686|pentiumpro|pentium[23]|pentium-m|athlon|athlon-tbird|athlon-4|athlon-[mx]p|athlon64|k8|opteron|athlon-fx|core2)
0f010b2f 1864 add_cflags -march=$cpu
497237c7
RP
1865 enable cmov
1866 enable fast_cmov
94e4c3a3
GP
1867 ;;
1868 # targets that do support conditional mov but on which it's slow
800a5a19 1869 pentium4|pentium4m|prescott|nocona)
0f010b2f 1870 add_cflags -march=$cpu
497237c7
RP
1871 enable cmov
1872 disable fast_cmov
bb270c08 1873 ;;
d7b34d08 1874 sparc64)
0f010b2f 1875 add_cflags -mcpu=v9
d7b34d08 1876 ;;
f2e49553 1877 arm11*|cortex*)
0f010b2f 1878 add_cflags -mcpu=$cpu
f2e49553
MR
1879 enable fast_unaligned
1880 ;;
0223bd6f 1881 armv*)
0f010b2f 1882 add_cflags -march=$cpu
0223bd6f 1883 ;;
f2e49553 1884 arm*)
0f010b2f 1885 add_cflags -mcpu=$cpu
6b19786b 1886 ;;
1cd11856 1887 ev4|ev45|ev5|ev56|pca56|ev6|ev67)
df442a8d 1888 enabled ccc && add_cflags -arch $cpu || add_cflags -mcpu=$cpu
1cd11856 1889 ;;
e4ddc8ed
MR
1890 bf*)
1891 add_cflags -mcpu=$cpu
1892 ;;
5b34250d
MR
1893 mips*|[45]k*|[237]4k*|m4k|r*000|loongson2[ef])
1894 add_cflags -march=$cpu
1895 ;;
bb270c08 1896 *)
7483e694 1897 echo "WARNING: Unknown CPU \"$cpu\", ignored."
bb270c08 1898 ;;
a4adb608
MN
1899 esac
1900fi
1901
b4d96ba2
MR
1902check_cc <<EOF || die "Symbol mangling check failed."
1903int ff_extern;
1904EOF
2f05d9c1 1905sym=$($nm -P -g $TMPO | grep ff_extern)
b4d96ba2
MR
1906extern_prefix=${sym%%ff_extern*}
1907
f65883c8
MR
1908check_cc <<EOF && enable inline_asm
1909void foo(void) { __asm__ volatile ("" ::); }
1910EOF
61d251db 1911
9eeed841 1912if enabled x86; then
44965991
PI
1913 # check whether EBP is available on x86
1914 # As 'i' is stored on the stack, this program will crash
1915 # if the base pointer is used to access it because the
1916 # base pointer is cleared in the inline assembly code.
7dfef245 1917 check_exec_crash <<EOF && enable ebp_available
44965991 1918 volatile int i=0;
be449fca 1919 __asm__ volatile (
44965991
PI
1920 "xorl %%ebp, %%ebp"
1921 ::: "%ebp");
1922 return i;
44965991
PI
1923EOF
1924
1925 # check wether EBX is available on x86
940f335a 1926 check_asm ebx_available '"":::"%ebx"'
8e380710 1927
d3a4b4e0
DB
1928 # check whether more than 10 operands are supported
1929 check_cc <<EOF && enable ten_operands
1930int main(void) {
1931 int x=0;
1932 __asm__ volatile(
1933 ""
1934 :"+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x)
1935 );
1936 return 0;
1937}
1938EOF
1939
d7f0920b 1940 # check whether binutils is new enough to compile SSSE3/MMX2
940f335a 1941 enabled ssse3 && check_asm ssse3 '"pabsw %xmm0, %xmm0"'
5fd89ca0 1942 enabled mmx2 && check_asm mmx2 '"pmaxub %mm0, %mm1"'
6bd859d6
MR
1943
1944 check_asm bswap '"bswap %%eax" ::: "%eax"'
304d586d 1945
d52481b9 1946 YASMFLAGS="-f $objformat -DARCH_$(toupper $subarch)"
304d586d
LM
1947 enabled x86_64 && append YASMFLAGS "-m amd64"
1948 enabled_all x86_64 shared && append YASMFLAGS "-DPIC"
1949 case "$objformat" in
1950 elf) enabled debug && append YASMFLAGS "-g dwarf2" ;;
1b0f6fb8 1951 macho64) append YASMFLAGS "-DPIC -DPREFIX" ;;
304d586d
LM
1952 *) append YASMFLAGS "-DPREFIX" ;;
1953 esac
7595a5e4 1954 disabled yasm || { check_yasm "pabsw xmm0, xmm0" && enable yasm; }
44965991
PI
1955fi
1956
87ea51e0
LB
1957# check for assembler specific support
1958
85dd97ad
MR
1959enabled mips && check_asm loongson '"dmult.g $1, $2, $3"'
1960
5b6c2cbd 1961enabled ppc && check_asm dcbzl '"dcbzl 0, 1"'
799fde37 1962enabled ppc && check_asm ppc4xx '"maclhw r10, r11, r12"'
cc078b5d 1963enabled ppc && check_asm xform_asm '"lwzx 0, %y0" :: "Z"(*(int*)0)'
87ea51e0 1964
57bd82d4
MR
1965# check for SIMD availability
1966
115329f1 1967# AltiVec flags: The FSF version of GCC differs from the Apple version
9eeed841 1968if enabled altivec; then
3ed1a2ee
DB
1969 check_cflags -maltivec -mabi=altivec &&
1970 { check_header altivec.h && inc_altivec_h="#include <altivec.h>" ; } ||
4477b9f4 1971 check_cflags -faltivec
b6e52719 1972
0182fee8 1973 # check if our compiler supports Motorola AltiVec C API
497237c7 1974 check_cc <<EOF || disable altivec
dcd479c0 1975$inc_altivec_h
a9a07762
MN
1976int main(void) {
1977 vector signed int v1, v2, v3;
1978 v1 = vec_add(v2,v3);
1979 return 0;
1980}
1981EOF
b006b26c
DB
1982
1983 # check if our compiler supports braces for vector declarations
80a61f08 1984 check_cc <<EOF || die "You need a compiler that supports {} in AltiVec vector declarations."
b006b26c 1985$inc_altivec_h
80a61f08 1986int main (void) { (vector int) {1}; return 0; }
b006b26c 1987EOF
a9a07762 1988fi
ab6c65f6 1989
b4e806b2 1990# We have to check if pld is a nop and disable it.
a2fc0f6a 1991enabled arm && check_asm pld '"pld [r0]"'
940f335a
MR
1992enabled armv5te && check_asm armv5te '"qadd r0, r0, r0"'
1993enabled armv6 && check_asm armv6 '"sadd16 r0, r0, r0"'
ab5cb084 1994enabled armv6t2 && check_asm armv6t2 '"movt r0, #0"'
f55b299a 1995enabled armvfp && check_asm armvfp '"fadds s0, s0, s0"'
940f335a
MR
1996enabled iwmmxt && check_asm iwmmxt '"wunpckelub wr6, wr4"'
1997enabled mmi && check_asm mmi '"lq $2, 0($2)"'
6b18d278 1998enabled neon && check_asm neon '"vadd.i16 q0, q0, q0"'
940f335a 1999enabled vis && check_asm vis '"pdist %f0, %f0, %f0"' -mcpu=ultrasparc
bd9d34a0 2000
0f010b2f 2001enabled vis && add_cflags -mcpu=ultrasparc -mtune=ultrasparc
8b03def6 2002
57bd82d4
MR
2003# ---
2004# big/little-endian test
9eebe687
MR
2005check_cc <<EOF || die "endian test failed"
2006unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';
a3999908 2007EOF
d04d9e16 2008od -A n -t x1 $TMPO | grep -q '42 *49 *47 *45' && enable bigendian
487a54d7 2009
a3999908 2010# ---
3d204385
NK
2011# check availability of some header files
2012
a98bb16d
RP
2013if check_func dlopen; then
2014 ldl=
2015elif check_func dlopen -ldl; then
2016 ldl=-ldl
8bf5d58f
MN
2017fi
2018
75ecf149
DB
2019# Solaris has nanosleep in -lrt, OpenSolaris no longer needs that
2020check_func nanosleep || { check_func nanosleep -lrt && add_extralibs -lrt; }
2021
7483e694
DB
2022check_func fork
2023check_func gethrtime
2024check_func getrusage
094c09bb 2025check_func inet_aton $network_extralibs
7483e694
DB
2026check_func memalign
2027check_func mkstemp
1f91cdce 2028check_func posix_memalign
b507ebd1 2029check_func_headers io.h setmode
e4673692 2030check_func_headers lzo/lzo1x.h lzo1x_999_compress
2446d3d6 2031check_func_headers windows.h GetProcessTimes
7c5bfe7a 2032check_func_headers windows.h VirtualAlloc
6ffa87d3 2033
e16e49ac 2034check_header conio.h
a98bb16d
RP
2035check_header dlfcn.h
2036check_header malloc.h
bf6ce82d 2037check_header poll.h
b58412f1 2038check_header sys/mman.h
b091aa44 2039check_header sys/resource.h
bf6ce82d 2040check_header sys/select.h
a98bb16d 2041check_header termios.h
272081b0
CEH
2042check_header vdpau/vdpau.h
2043check_header vdpau/vdpau_x11.h
68178ca9 2044check_header X11/extensions/XvMClib.h
a98bb16d 2045
1f91cdce
RP
2046if ! enabled_any memalign memalign_hack posix_memalign && enabled need_memalign ; then
2047 die "Error, no aligned memory allocator but SSE enabled, disable it or use --enable-memalign-hack."
a98bb16d 2048fi
e16e49ac 2049
a4fa192c 2050disabled zlib || check_lib zlib.h zlibVersion -lz || disable zlib
632948bd 2051disabled bzlib || check_lib2 bzlib.h BZ2_bzlibVersion -lbz2 || disable bzlib
57bd82d4
MR
2052
2053# check for some common methods of building with pthread support
2054# do this before the optional library checks as some of them require pthreads
2055if enabled pthreads; then
9e7fd101
MR
2056 if check_func pthread_create; then
2057 :
2058 elif check_func pthread_create -pthread; then
2059 add_cflags -pthread
afc9aee2 2060 add_extralibs -pthread
9e7fd101
MR
2061 elif check_func pthread_create -pthreads; then
2062 add_cflags -pthreads
afc9aee2 2063 add_extralibs -pthreads
8d94f606
GT
2064 elif check_func pthread_create -lpthreadGC2; then
2065 add_extralibs -lpthreadGC2
9e7fd101
MR
2066 elif ! check_lib pthread.h pthread_create -lpthread; then
2067 die "ERROR: can't find pthreads library"
2068 fi
57bd82d4
MR
2069fi
2070
8eee7025 2071for thread in $THREADS_LIST; do
e5f94c2b 2072 if enabled $thread; then
3ae3b721
RP
2073 test -n "$thread_type" &&
2074 die "ERROR: Only one thread type must be selected." ||
e5f94c2b 2075 thread_type="$thread"
e5f94c2b
RP
2076 fi
2077done
2078
fdf88598 2079check_lib math.h sin -lm
ff418735 2080check_lib va/va.h vaInitialize -lva
fdf88598 2081
a33cab3a 2082# test for C99 functions in math.h
7b04b8a0 2083for func in llrint lrint lrintf round roundf truncf; do
a33cab3a 2084 check_exec <<EOF && enable $func || disable $func
f32adb22 2085#include <math.h>
a33cab3a 2086int main(void) { return ($func(3.999f) > 0)?0:1; }
f32adb22 2087EOF
a33cab3a 2088done
f32adb22 2089
57bd82d4 2090# these are off by default, so fail if requested and not available
79fda097 2091enabled avisynth && require2 vfw32 "windows.h vfw.h" AVIFileInit -lvfw32
29382bc1 2092enabled libamr_nb && require libamrnb amrnb/interf_dec.h Decoder_Interface_init -lamrnb -lm
7483e694 2093enabled libamr_wb && require libamrwb amrwb/dec_if.h D_IF_init -lamrwb -lm
e3cc7d6f 2094enabled libdirac && add_cflags $(pkg-config --cflags dirac) &&
36718e51
DB
2095 require libdirac libdirac_decoder/dirac_parser.h dirac_decoder_init -ldirac_decoder &&
2096 require libdirac libdirac_encoder/dirac_encoder.h dirac_encoder_init -ldirac_encoder
79fda097
DB
2097enabled libfaac && require2 libfaac "stdint.h faac.h" faacEncGetVersion -lfaac
2098enabled libfaad && require2 libfaad faad.h faacDecOpen -lfaad
7483e694 2099enabled libgsm && require libgsm gsm.h gsm_create -lgsm
2bfecf73 2100enabled libmp3lame && require libmp3lame lame/lame.h lame_init -lmp3lame -lm
7483e694 2101enabled libnut && require libnut libnut.h nut_demuxer_init -lnut
0b175caa
DB
2102enabled libopencore_amrnb && require libopencore_amrnb opencore-amrnb/interf_dec.h Decoder_Interface_init -lopencore-amrnb -lm
2103enabled libopencore_amrwb && require libopencore_amrwb opencore-amrwb/dec_if.h D_IF_init -lopencore-amrwb -lm
3d6fac8c 2104enabled libopenjpeg && require libopenjpeg openjpeg.h opj_version -lopenjpeg
36718e51
DB
2105enabled libschroedinger && add_cflags $(pkg-config --cflags schroedinger-1.0) &&
2106 require libschroedinger schroedinger/schro.h schro_init $(pkg-config --libs schroedinger-1.0)
ae14f311 2107enabled libspeex && require libspeex speex/speex.h speex_decoder_init -lspeex
7483e694
DB
2108enabled libtheora && require libtheora theora/theora.h theora_info_init -ltheora -logg
2109enabled libvorbis && require libvorbis vorbis/vorbisenc.h vorbis_info_init -lvorbisenc -lvorbis -logg
2bfecf73 2110enabled libx264 && require libx264 x264.h x264_encoder_open -lx264 -lm &&
57f0ec6e
MR
2111 { check_cpp_condition x264.h "X264_BUILD >= 65" ||
2112 die "ERROR: libx264 version must be >= 0.65."; }
2bfecf73 2113enabled libxvid && require libxvid xvid.h xvid_global -lxvidcore
7483e694 2114enabled mlib && require mediaLib mlib_types.h mlib_VectorSub_S16_U8_Mod -lmlib
8ac17293 2115
0b4a1821
AS
2116# libdc1394 check
2117if enabled libdc1394; then
2118 { check_lib dc1394/dc1394.h dc1394_new -ldc1394 -lraw1394 &&
2119 enable libdc1394_2; } ||
2120 { check_lib libdc1394/dc1394_control.h dc1394_create_handle -ldc1394_control -lraw1394 &&
2121 enable libdc1394_1; } ||
2122 die "ERROR: No version of libdc1394 found "
2123fi
2124
2125
c13e1abd
FH
2126_restrict=
2127for restrict_keyword in restrict __restrict__ __restrict; do
57bd82d4 2128 check_cc <<EOF && _restrict=$restrict_keyword && break
dcd479c0
MR
2129void foo(char * $restrict_keyword p);
2130EOF
c13e1abd
FH
2131done
2132
a86b921c 2133##########################################
29799f8b 2134# SDL check
a86b921c 2135
497237c7
RP
2136disable sdl_too_old
2137disable sdl
6a1a892f 2138SDL_CONFIG="${cross_prefix}sdl-config"
2270b4b2 2139if "${SDL_CONFIG}" --version > /dev/null 2>&1; then
5e622c40 2140 sdl_cflags=$("${SDL_CONFIG}" --cflags)
225e21ef 2141 temp_cflags $sdl_cflags
5e622c40 2142 temp_extralibs $("${SDL_CONFIG}" --libs)
1ca5d97f 2143 if check_lib2 SDL.h SDL_Init; then
5e622c40 2144 _sdlversion=$("${SDL_CONFIG}" --version | sed 's/[^0-9]//g')
29f3b38a 2145 if test "$_sdlversion" -lt 121 ; then
497237c7 2146 enable sdl_too_old
dcd479c0 2147 else
497237c7 2148 enable sdl
225e21ef 2149 check_cc $sdl_cflags <<EOF && enable sdl_video_size
29f3b38a 2150#include <SDL.h>
d6773f56 2151int main(int argc, char **argv){
29f3b38a
MR
2152 const SDL_VideoInfo *vi = SDL_GetVideoInfo();
2153 int w = vi->current_w;
2154 return 0;
2155}
2156EOF
dcd479c0
MR
2157 fi
2158 fi
29f3b38a 2159 restore_flags
c3f6b472 2160fi
57bd82d4 2161
2270b4b2 2162texi2html -version > /dev/null 2>&1 && enable texi2html || disable texi2html
146ea952 2163
7a91333f 2164##########################################
73b46a95
RP
2165# Network check
2166
2167if enabled network; then
96000432 2168 check_type "sys/types.h sys/socket.h" socklen_t
73b46a95
RP
2169 # Prefer arpa/inet.h over winsock2
2170 if check_header arpa/inet.h ; then
2171 check_func closesocket
2172 elif check_header winsock2.h ; then
ea10ddde 2173 network_extralibs="-lws2_32"
72be9e73 2174 check_type ws2tcpip.h socklen_t
2446d3d6 2175 check_func_headers winsock2.h closesocket
28c9f069
MK
2176 else
2177 disable network
73b46a95
RP
2178 fi
2179fi
2180
2181##########################################
29799f8b 2182# IPv6 check
7a91333f 2183
497237c7 2184enabled network && enabled ipv6 && check_ld <<EOF && enable ipv6 || disable ipv6
7a91333f
HZ
2185#include <sys/types.h>
2186#include <sys/socket.h>
2187#include <netinet/in.h>
2188#include <netdb.h>
db817cf3 2189int main(void) {
7483e694
DB
2190 struct sockaddr_storage saddr;
2191 struct ipv6_mreq mreq6;
2192 getaddrinfo(0,0,0,0);
2193 getnameinfo(0,0,0,0,0,0,0);
2194 IN6_IS_ADDR_MULTICAST((const struct in6_addr *)0);
7a91333f
HZ
2195}
2196EOF
2197
06e31011
RP
2198check_header linux/videodev.h
2199check_header linux/videodev2.h
1b6e8b73 2200check_header sys/videoio.h
47f38850 2201
2446d3d6 2202check_func_headers "windows.h vfw.h" capCreateCaptureWindow -lvfw32
c2345207 2203
f8aa696f 2204# check for ioctl_meteor.h, ioctl_bt848.h and alternatives
1c915f83
RP
2205{ check_header dev/bktr/ioctl_meteor.h &&
2206 check_header dev/bktr/ioctl_bt848.h; } ||
2207{ check_header machine/ioctl_meteor.h &&
2208 check_header machine/ioctl_bt848.h; } ||
2209{ check_header dev/video/meteor/ioctl_meteor.h &&
2210 check_header dev/video/bktr/ioctl_bt848.h; } ||
2211check_header dev/ic/bt8xx.h
f8aa696f 2212
c7682de0
RP
2213check_header sys/soundcard.h
2214check_header soundcard.h
deb29777 2215
35fd8122
NG
2216check_lib2 alsa/asoundlib.h snd_pcm_htimestamp -lasound
2217
30b1fff6 2218enabled jack_demuxer && check_lib2 jack/jack.h jack_client_open -ljack
80ff8a16 2219
7483e694 2220# deal with the X11 frame grabber
56a059ac 2221enabled x11grab &&
f58f4ce1
GP
2222check_header X11/Xlib.h &&
2223check_header X11/extensions/XShm.h &&
2224check_func XOpenDisplay -lX11 &&
06eab4ba 2225check_func XShmCreateImage -lX11 -lXext
f58f4ce1 2226
40bcf4c7 2227enabled debug && add_cflags -g"$debuglevel"
57bd82d4
MR
2228
2229# add some useful compiler flags if supported
2230check_cflags -Wdeclaration-after-statement
dcd479c0
MR
2231check_cflags -Wall
2232check_cflags -Wno-switch
c07bd6a9
MN
2233check_cflags -Wdisabled-optimization
2234check_cflags -Wpointer-arith
2235check_cflags -Wredundant-decls
cc1fb623 2236check_cflags -Wno-pointer-sign
f4929996 2237check_cflags -Wcast-qual
9aceb3cf 2238check_cflags -Wwrite-strings
652a5bf6 2239check_cflags -Wtype-limits
764551c6 2240check_cflags -Wundef
5af4e0cc 2241enabled extra_warnings && check_cflags -Winline
cf9d24ad 2242
57bd82d4 2243# add some linker flags
5c0e9479 2244check_ldflags -Wl,--warn-common
8351d2ba
DB
2245check_ldflags -Wl,--as-needed
2246check_ldflags '-Wl,-rpath-link,\$(BUILD_ROOT)/libpostproc -Wl,-rpath-link,\$(BUILD_ROOT)/libswscale -Wl,-rpath-link,\$(BUILD_ROOT)/libavfilter -Wl,-rpath-link,\$(BUILD_ROOT)/libavdevice -Wl,-rpath-link,\$(BUILD_ROOT)/libavformat -Wl,-rpath-link,\$(BUILD_ROOT)/libavcodec -Wl,-rpath-link,\$(BUILD_ROOT)/libavutil'
c2fd6530 2247check_ldflags -Wl,-Bsymbolic
94a3401e 2248
bd2216e4
MR
2249if enabled small; then
2250 check_cflags -Os # not all compilers support -Os
8400d6b8
DB
2251 optimizations="small"
2252elif enabled optimizations; then
629687f6 2253 if enabled xlc; then
0f010b2f
DB
2254 add_cflags -O5
2255 add_ldflags -O5
df442a8d
MR
2256 elif enabled ccc; then
2257 add_cflags -fast
cf9d24ad 2258 else
0f010b2f 2259 add_cflags -O3
cf9d24ad 2260 fi
cddf3f45 2261fi
11fdbc44 2262check_cflags -fno-math-errno
b2eb2ff0 2263check_cflags -fno-signed-zeros
cddf3f45 2264
504a64b9 2265# add some flags for Intel C Compiler
629687f6 2266if enabled icc; then
b1598b58
MR
2267 # Just warnings, no remarks
2268 check_cflags -w1
2269 # -wd: Disable following warnings
2270 # 144, 167, 556: -Wno-pointer-sign
2271 # 10006: ignoring unknown option -fno-signed-zeros
2272 # 10156: ignoring option '-W'; no argument required
2273 check_cflags -wd144,167,556,10006,10156
2274 # 11030: Warning unknown option --as-needed
2275 # 10156: ignoring option '-export'; no argument required
2276 check_ldflags -wd10156,11030
2277 # Allow to compile with optimizations
2278 check_ldflags -march=$cpu
be2cf98a
CEH
2279 # icc 11.0 and 11.1 work with ebp_available, but don't pass the test
2280 enable ebp_available
df442a8d
MR
2281elif enabled ccc; then
2282 # disable some annoying warnings
2283 add_cflags -msg_disable cvtu32to64
2284 add_cflags -msg_disable embedcomment
2285 add_cflags -msg_disable needconstext
2286 add_cflags -msg_disable nomainieee
2287 add_cflags -msg_disable ptrmismatch1
2288 add_cflags -msg_disable unreachcode
504a64b9
CEH
2289fi
2290
80581e98 2291# PIC flags for shared library objects where they are needed
5af4e0cc 2292if enabled shared; then
569cb218
MR
2293 # LIBOBJFLAGS may have already been set in the OS configuration
2294 if test -z "$LIBOBJFLAGS" ; then
a8e28698 2295 case "${subarch-$arch}" in
b6bd7268 2296 x86_64|ia64|alpha|sparc*|power*|parisc*|mips*) LIBOBJFLAGS='$(PIC)' ;;
569cb218
MR
2297 esac
2298 fi
80581e98
MN
2299fi
2300
90be59ef 2301if enabled gprof; then
0f010b2f
DB
2302 add_cflags -p
2303 add_ldflags -p
1db54e20
DB
2304fi
2305
7f3c02fc 2306# Find out if the .align argument is a power of two or not.
9377b6ce 2307check_asm asmalign_pot '".align 3"'
4454dc1b 2308
7483e694
DB
2309enabled_any $DECODER_LIST && enable decoders
2310enabled_any $ENCODER_LIST && enable encoders
5666fd73 2311enabled_any $HWACCEL_LIST && enable hwaccels
7483e694
DB
2312enabled_any $BSF_LIST && enable bsfs
2313enabled_any $DEMUXER_LIST && enable demuxers
2314enabled_any $MUXER_LIST && enable muxers
f7679c54 2315enabled_any $FILTER_LIST && enable filters
7483e694
DB
2316enabled_any $INDEV_LIST && enable demuxers
2317enabled_any $OUTDEV_LIST && enable muxers
2318enabled_any $PROTOCOL_LIST && enable protocols
2319
2320enabled_any $THREADS_LIST && enable threads
2321
2322check_deps $CONFIG_LIST \
b6bb00b0 2323 $CONFIG_EXTRA \
7483e694
DB
2324 $HAVE_LIST \
2325 $DECODER_LIST \
2326 $ENCODER_LIST \
5666fd73 2327 $HWACCEL_LIST \
7483e694
DB
2328 $PARSER_LIST \
2329 $BSF_LIST \
2330 $DEMUXER_LIST \
2331 $MUXER_LIST \
f7679c54 2332 $FILTER_LIST \
7483e694
DB
2333 $INDEV_LIST \
2334 $OUTDEV_LIST \
2335 $PROTOCOL_LIST \
f70f03f6 2336
3e89171a 2337echo "install prefix $prefix"
f36958f8
DB
2338echo "source path $source_path"
2339echo "C compiler $cc"
bfd5afd8 2340echo ".align is power-of-two $asmalign_pot"
f36958f8 2341echo "ARCH $arch ($cpu)"
ce8871c2
MR
2342if test "$build_suffix" != ""; then
2343 echo "build suffix $build_suffix"
eb94aca9 2344fi
ac63af34
DB
2345if test "$extra_version" != ""; then
2346 echo "version string suffix $extra_version"
2347fi
0db2ce77 2348echo "big-endian ${bigendian-no}"
e90f5b5a 2349echo "runtime cpu detection ${runtime_cpudetect-no}"
5b6c2cbd 2350if enabled x86; then
af44e8e4 2351 echo "yasm ${yasm-no}"
0db2ce77 2352 echo "MMX enabled ${mmx-no}"
30e98e62 2353 echo "MMX2 enabled ${mmx2-no}"
3bf96eec 2354 echo "3DNow! enabled ${amd3dnow-no}"
a1ef9f08 2355 echo "3DNow! extended enabled ${amd3dnowext-no}"
1bb04d5a 2356 echo "SSE enabled ${sse-no}"
30e98e62 2357 echo "SSSE3 enabled ${ssse3-no}"
0db2ce77
MR
2358 echo "CMOV enabled ${cmov-no}"
2359 echo "CMOV is fast ${fast_cmov-no}"
971cc990
MN
2360 echo "EBX available ${ebx_available-no}"
2361 echo "EBP available ${ebp_available-no}"
d3a4b4e0 2362 echo "10 operands supported ${ten_operands-no}"
e41e8342 2363fi
5b6c2cbd 2364if enabled arm; then
0db2ce77
MR
2365 echo "ARMv5TE enabled ${armv5te-no}"
2366 echo "ARMv6 enabled ${armv6-no}"
ab5cb084 2367 echo "ARMv6T2 enabled ${armv6t2-no}"
f55b299a 2368 echo "ARM VFP enabled ${armvfp-no}"
0db2ce77 2369 echo "IWMMXT enabled ${iwmmxt-no}"
6b18d278 2370 echo "NEON enabled ${neon-no}"
eba9ae3c 2371fi
5b6c2cbd 2372if enabled mips; then
0db2ce77 2373 echo "MMI enabled ${mmi-no}"
e41e8342 2374fi
5b6c2cbd 2375if enabled ppc; then
0db2ce77 2376 echo "AltiVec enabled ${altivec-no}"
30e98e62 2377 echo "PPC 4xx optimizations ${ppc4xx-no}"
0db2ce77 2378 echo "dcbzl available ${dcbzl-no}"
30e98e62
DB
2379 echo "performance report ${powerpc_perf-no}"
2380fi
2381if enabled sparc; then
2382 echo "VIS enabled ${vis-no}"
e41e8342 2383fi
0db2ce77
MR
2384echo "gprof enabled ${gprof-no}"
2385echo "debug symbols ${debug-no}"
87a0fb62 2386echo "strip symbols ${stripping-no}"
8400d6b8 2387echo "optimizations ${optimizations-no}"
0db2ce77
MR
2388echo "static ${static-no}"
2389echo "shared ${shared-no}"
4a24ab64 2390echo "postprocessing support ${postproc-no}"
f7679c54 2391echo "new filter support ${avfilter-no}"
81124ba0 2392echo "filters using lavformat ${avfilter_lavf-no}"
0db2ce77 2393echo "network support ${network-no}"
90be59ef 2394if enabled network; then
0db2ce77 2395 echo "IPv6 support ${ipv6-no}"
bfd5afd8 2396fi
0db2ce77
MR
2397echo "threading support ${thread_type-no}"
2398echo "SDL support ${sdl-no}"
90be59ef 2399if enabled sdl_too_old; then
bfd5afd8
DB
2400 echo "-> Your SDL version is too old - please upgrade to have FFplay/SDL support."
2401fi
0db2ce77
MR
2402echo "Sun medialib support ${mlib-no}"
2403echo "AVISynth enabled ${avisynth-no}"
0db2ce77
MR
2404echo "libamr-nb support ${libamr_nb-no}"
2405echo "libamr-wb support ${libamr_wb-no}"
f7b8bffe 2406echo "libdc1394 support ${libdc1394-no}"
690bfceb 2407echo "libdirac enabled ${libdirac-no}"
0db2ce77
MR
2408echo "libfaac enabled ${libfaac-no}"
2409echo "libfaad enabled ${libfaad-no}"
7e0871a7 2410echo "libfaad dlopened ${libfaadbin-no}"
0db2ce77
MR
2411echo "libgsm enabled ${libgsm-no}"
2412echo "libmp3lame enabled ${libmp3lame-no}"
2413echo "libnut enabled ${libnut-no}"
0b175caa
DB
2414echo "libopencore-amrnb support ${libopencore_amrnb-no}"
2415echo "libopencore-amrwb support ${libopencore_amrwb-no}"
9a77d59a 2416echo "libopenjpeg enabled ${libopenjpeg-no}"
f7cd9eed 2417echo "libschroedinger enabled ${libschroedinger-no}"
ae14f311 2418echo "libspeex enabled ${libspeex-no}"
0db2ce77
MR
2419echo "libtheora enabled ${libtheora-no}"
2420echo "libvorbis enabled ${libvorbis-no}"
d6bd62db
DB
2421echo "libx264 enabled ${libx264-no}"
2422echo "libxvid enabled ${libxvid-no}"
0db2ce77 2423echo "zlib enabled ${zlib-no}"
f402916e 2424echo "bzlib enabled ${bzlib-no}"
2c62e737 2425echo
de6d9b64 2426
5666fd73 2427for type in decoder encoder hwaccel parser demuxer muxer protocol filter bsf indev outdev; do
8138b9db 2428 echo "Enabled ${type}s:"
f65c9da1 2429 eval list=\$$(toupper $type)_LIST
8138b9db 2430 for part in $list; do
f65c9da1
MR
2431 enabled $part && echo ${part%_*}
2432 done | sort | pr -3 -t
2433 echo
8138b9db
RP
2434done
2435
ba7a7039 2436license="LGPL version 2.1 or later"
ba321adb 2437if enabled nonfree; then
ba7a7039 2438 license="nonfree and unredistributable"
9cad0e4e
DB
2439elif enabled gplv3; then
2440 license="GPL version 3 or later"
2441elif enabled lgplv3; then
2442 license="LGPL version 3 or later"
ba321adb 2443elif enabled gpl; then
ba7a7039 2444 license="GPL version 2 or later"
ba321adb
JK
2445fi
2446
2447echo "License: $license"
ca5323af 2448
cf1392e9
DB
2449echo "Creating config.mak and config.h..."
2450
29799f8b
DB
2451echo "# Automatically generated by configure - do not modify!" > config.mak
2452echo "/* Automatically generated by configure - do not modify! */" > $TMPH
9c05103f
DB
2453echo "#ifndef FFMPEG_CONFIG_H" >> $TMPH
2454echo "#define FFMPEG_CONFIG_H" >> $TMPH
b04251c5 2455echo "#define FFMPEG_CONFIGURATION \"$(c_escape $FFMPEG_CONFIGURATION)\"" >> $TMPH
14a8acf1 2456echo "#define FFMPEG_DATADIR \"$(eval c_escape $datadir)\"" >> $TMPH
de6d9b64 2457
d921f03f 2458echo "FFMPEG_CONFIGURATION=$FFMPEG_CONFIGURATION" >> config.mak
c9d19248 2459echo "prefix=$prefix" >> config.mak
22a324da
DB
2460echo "LIBDIR=\$(DESTDIR)$libdir" >> config.mak
2461echo "SHLIBDIR=\$(DESTDIR)$shlibdir" >> config.mak
2462echo "INCDIR=\$(DESTDIR)$incdir" >> config.mak
2463echo "BINDIR=\$(DESTDIR)$bindir" >> config.mak
14a8acf1 2464echo "DATADIR=\$(DESTDIR)$datadir" >> config.mak
22a324da 2465echo "MANDIR=\$(DESTDIR)$mandir" >> config.mak
0a7ee3ef
DB
2466echo "SRC_PATH=\"$source_path\"" >> config.mak
2467echo "SRC_PATH_BARE=$source_path" >> config.mak
2468echo "BUILD_ROOT=\"$PWD\"" >> config.mak
980fc7b8 2469echo "CC=$cc" >> config.mak
313c46a6 2470echo "AS=$as" >> config.mak
304d586d 2471echo "YASM=$yasmexe" >> config.mak
980fc7b8 2472echo "AR=$ar" >> config.mak
be7109c1 2473echo "RANLIB=$ranlib" >> config.mak
20369773 2474echo "LN_S=$ln_s" >> config.mak
87a0fb62 2475enabled stripping &&
3ae3b721 2476 echo "STRIP=$strip" >> config.mak ||
f25fc9b1 2477 echo "STRIP=echo ignoring strip" >> config.mak
75388c74 2478
a9b3f630 2479echo "OPTFLAGS=$CFLAGS" >> config.mak
0f3cb305 2480echo "LDFLAGS=$LDFLAGS" >> config.mak
c536cb09 2481echo "FFSERVERLDFLAGS=$FFSERVERLDFLAGS" >> config.mak
e1707f52 2482echo "SHFLAGS=$SHFLAGS" >> config.mak
304d586d 2483echo "YASMFLAGS=$YASMFLAGS" >> config.mak
80581e98 2484echo "LIBOBJFLAGS=$LIBOBJFLAGS" >> config.mak
5af4e0cc 2485echo "BUILD_STATIC=$static" >> config.mak
ce8871c2 2486echo "BUILDSUF=$build_suffix" >> config.mak
c5f14466 2487echo "FULLNAME=$FULLNAME" >> config.mak
f3ec2d46 2488echo "LIBPREF=$LIBPREF" >> config.mak
c5f14466 2489echo "LIBSUF=$LIBSUF" >> config.mak
24743a76 2490echo "LIBNAME=$LIBNAME" >> config.mak
f3ec2d46 2491echo "SLIBPREF=$SLIBPREF" >> config.mak
c5f14466
RP
2492echo "SLIBSUF=$SLIBSUF" >> config.mak
2493echo "EXESUF=$EXESUF" >> config.mak
ac63af34 2494echo "EXTRA_VERSION=$extra_version" >> config.mak
315c741d 2495echo "DEPEND_CMD=$DEPEND_CMD" >> config.mak
9da6609f
MR
2496echo "HOSTCC=$host_cc" >> config.mak
2497echo "HOSTCFLAGS=$host_cflags" >> config.mak
82bb3329 2498echo "HOSTEXESUF=$HOSTEXESUF" >> config.mak
9da6609f
MR
2499echo "HOSTLDFLAGS=$host_ldflags" >> config.mak
2500echo "HOSTLIBS=$host_libs" >> config.mak
a7ada2ba
MR
2501echo "TARGET_EXEC=$target_exec" >> config.mak
2502echo "TARGET_PATH=$target_path" >> config.mak
4dc62701 2503
90be59ef 2504if enabled bigendian; then
7483e694
DB
2505 echo "WORDS_BIGENDIAN=yes" >> config.mak
2506 echo "#define WORDS_BIGENDIAN 1" >> $TMPH
91d1f1a4 2507fi
44161118 2508
90be59ef 2509if enabled sdl; then
5e622c40
DB
2510 echo "SDL_LIBS=$("${SDL_CONFIG}" --libs)" >> config.mak
2511 echo "SDL_CFLAGS=$("${SDL_CONFIG}" --cflags)" >> config.mak
a86b921c 2512fi
90be59ef 2513if enabled texi2html; then
7483e694 2514 echo "BUILD_DOC=yes" >> config.mak
146ea952 2515fi
5a872801 2516
719c8e00
MR
2517get_version(){
2518 name=$1
2519 file=$source_path/$2
147e7692
MR
2520 eval $(grep "#define ${name}_VERSION_M" "$file" | awk '{ print $2"="$3 }')
2521 eval ${name}_VERSION=\$${name}_VERSION_MAJOR.\$${name}_VERSION_MINOR.\$${name}_VERSION_MICRO
0e32c8c6
MR
2522 lcname=$(tolower $name)
2523 eval echo "${lcname}_VERSION=\$${name}_VERSION" >> config.mak
2524 eval echo "${lcname}_VERSION_MAJOR=\$${name}_VERSION_MAJOR" >> config.mak
719c8e00
MR
2525}
2526
147e7692
MR
2527get_version LIBSWSCALE libswscale/swscale.h
2528get_version LIBPOSTPROC libpostproc/postprocess.h
2529get_version LIBAVCODEC libavcodec/avcodec.h
2530get_version LIBAVDEVICE libavdevice/avdevice.h
2531get_version LIBAVFORMAT libavformat/avformat.h
2532get_version LIBAVUTIL libavutil/avutil.h
a6601d69 2533get_version LIBAVFILTER libavfilter/avfilter.h
5a872801 2534
5af4e0cc 2535if enabled shared; then
7483e694
DB
2536 echo "BUILD_SHARED=yes" >> config.mak
2537 echo "PIC=-fPIC -DPIC" >> config.mak
dcc01c06 2538 echo "LIBTARGET=${LIBTARGET}" >> config.mak
7483e694
DB
2539 echo "SLIBNAME=${SLIBNAME}" >> config.mak
2540 echo "SLIBNAME_WITH_VERSION=${SLIBNAME_WITH_VERSION}" >> config.mak
2541 echo "SLIBNAME_WITH_MAJOR=${SLIBNAME_WITH_MAJOR}" >> config.mak
d22e8442 2542 echo "SLIB_CREATE_DEF_CMD=${SLIB_CREATE_DEF_CMD}" >> config.mak
7483e694
DB
2543 echo "SLIB_EXTRA_CMD=${SLIB_EXTRA_CMD}" >> config.mak
2544 echo "SLIB_INSTALL_EXTRA_CMD=${SLIB_INSTALL_EXTRA_CMD}" >> config.mak
2545 echo "SLIB_UNINSTALL_EXTRA_CMD=${SLIB_UNINSTALL_EXTRA_CMD}" >> config.mak
0319c531 2546fi
d7e27559 2547echo "LIB_INSTALL_EXTRA_CMD=${LIB_INSTALL_EXTRA_CMD}" >> config.mak
ef0bc4c9 2548echo "EXTRALIBS=$extralibs" >> config.mak
d2845d68 2549
7b5e8a27
DB
2550echo "ARCH=$arch" >> config.mak
2551
3d907e22
MR
2552print_config ARCH_ $TMPH config.mak $ARCH_LIST
2553print_config HAVE_ $TMPH config.mak $HAVE_LIST
7483e694 2554print_config CONFIG_ $TMPH config.mak $CONFIG_LIST \
b6bb00b0 2555 $CONFIG_EXTRA \
7483e694
DB
2556 $DECODER_LIST \
2557 $ENCODER_LIST \
5666fd73 2558 $HWACCEL_LIST \
7483e694
DB
2559 $PARSER_LIST \
2560 $BSF_LIST \
2561 $DEMUXER_LIST \
2562 $MUXER_LIST \
f7679c54 2563 $FILTER_LIST \
7483e694
DB
2564 $PROTOCOL_LIST \
2565 $INDEV_LIST \
2566 $OUTDEV_LIST \
8ac17293 2567
c13e1abd
FH
2568echo "#define restrict $_restrict" >> $TMPH
2569
bd2216e4 2570if enabled small; then
7483e694 2571 echo "#define av_always_inline" >> $TMPH
bb801c97
MN
2572fi
2573
0f3cb305 2574
8156056e 2575# Apparently it's not possible to portably echo a backslash.
3ae3b721 2576enabled asmalign_pot &&
7483e694 2577 printf '#define ASMALIGN(ZEROBITS) ".align " #ZEROBITS "\\n\\t"\n' >> $TMPH ||
295b8c70 2578 printf '#define ASMALIGN(ZEROBITS) ".align 1 << " #ZEROBITS "\\n\\t"\n' >> $TMPH
4454dc1b 2579
b4d96ba2 2580echo "#define EXTERN_PREFIX \"${extern_prefix}\"" >> $TMPH
bc634f6f 2581
9c05103f
DB
2582echo "#endif /* FFMPEG_CONFIG_H */" >> $TMPH
2583
b7860763 2584# Do not overwrite an unchanged config.h to avoid superfluous rebuilds.
3ae3b721
RP
2585cmp -s $TMPH config.h &&
2586 echo "config.h is unchanged" ||
2587 mv -f $TMPH config.h
3d204385 2588
165af439 2589# build tree in object directory if source path is different from current one
90be59ef 2590if enabled source_path_used; then
165af439 2591 DIRS="\
7483e694
DB
2592 doc \
2593 libavcodec \
2594 libavcodec/alpha \
a2fc0f6a 2595 libavcodec/arm \
7483e694 2596 libavcodec/bfin \
7483e694
DB
2597 libavcodec/mlib \
2598 libavcodec/ppc \
2599 libavcodec/sh4 \
2600 libavcodec/sparc \
a6493a8f 2601 libavcodec/x86 \
52a9cf34 2602 libavdevice \
f7679c54 2603 libavfilter \
7483e694
DB
2604 libavformat \
2605 libavutil \
2606 libpostproc \
2607 libswscale \
b2cfd7e3
RP
2608 libswscale/bfin \
2609 libswscale/mlib \
2610 libswscale/ppc \
2611 libswscale/sparc \
2612 libswscale/x86 \
7483e694
DB
2613 tests \
2614 tools \
7483e694 2615 "
165af439 2616 FILES="\
7483e694
DB
2617 Makefile \
2618 common.mak \
71c61f62 2619 subdir.mak \
7483e694
DB
2620 doc/texi2pod.pl \
2621 libavcodec/Makefile \
52a9cf34 2622 libavdevice/Makefile \
f7679c54 2623 libavfilter/Makefile \
7483e694
DB
2624 libavformat/Makefile \
2625 libavutil/Makefile \
2626 libpostproc/Makefile \
2627 libswscale/Makefile \
2628 "
165af439 2629 for dir in $DIRS ; do
7483e694 2630 mkdir -p $dir
165af439
MR
2631 done
2632 for f in $FILES ; do
20369773 2633 $ln_s "$source_path/$f" $f
165af439
MR
2634 done
2635fi
def4272a 2636
def4272a 2637
d0674868 2638# build pkg-config files
def4272a 2639
d0674868
DB
2640pkgconfig_generate(){
2641name=$1
b0dfd108 2642shortname=${name#lib}${build_suffix}
d0674868
DB
2643comment=$2
2644version=$3
2645libs=$4
2646requires=$5
25cd5cb3 2647cat <<EOF > $name/$name.pc
3e89171a 2648prefix=$prefix
a94e666c 2649exec_prefix=\${prefix}
f2b7382c 2650libdir=$libdir
7622778e 2651includedir=$incdir
def4272a 2652
d0674868
DB
2653Name: $name
2654Description: $comment
2655Version: $version
5dcfe9f8
AH
2656Requires: $(disabled shared && echo $requires)
2657Requires.private: $(enabled shared && echo $requires)
def4272a 2658Conflicts:
12701f6e
AH
2659Libs: -L\${libdir} -l${shortname} $(disabled shared && echo $libs)
2660Libs.private: $(enabled shared && echo $libs)
76a448ed 2661Cflags: -I\${includedir}
def4272a 2662EOF
25cd5cb3 2663cat <<EOF > $name/$name-uninstalled.pc
def4272a
AJ
2664prefix=
2665exec_prefix=
46d1ff83 2666libdir=\${pcfiledir}
1d44d365 2667includedir=${source_path}
def4272a 2668
d0674868
DB
2669Name: $name
2670Description: $comment
2671Version: $version
2672Requires: $requires
def4272a 2673Conflicts:
12701f6e 2674Libs: \${libdir}/${LIBPREF}${shortname}${LIBSUF} $libs
def4272a
AJ
2675Cflags: -I\${includedir}
2676EOF
d0674868 2677}
def4272a 2678
e426941d 2679pkgconfig_generate libavutil "FFmpeg utility library" "$LIBAVUTIL_VERSION"
46983309
RT
2680pkgconfig_generate libavcodec "FFmpeg codec library" "$LIBAVCODEC_VERSION" "$extralibs" "libavutil = $LIBAVUTIL_VERSION"
2681pkgconfig_generate libavformat "FFmpeg container format library" "$LIBAVFORMAT_VERSION" "$extralibs" "libavcodec = $LIBAVCODEC_VERSION"
2682pkgconfig_generate libavdevice "FFmpeg device handling library" "$LIBAVDEVICE_VERSION" "$extralibs" "libavformat = $LIBAVFORMAT_VERSION"
3ed1a2ee 2683enabled avfilter &&
46983309 2684 pkgconfig_generate libavfilter "FFmpeg video filtering library" "$LIBAVFILTER_VERSION" "$extralibs" "libavutil = $LIBAVUTIL_VERSION"
3ed1a2ee 2685enabled postproc &&
e426941d 2686 pkgconfig_generate libpostproc "FFmpeg post processing library" "$LIBPOSTPROC_VERSION"
5add54b4 2687pkgconfig_generate libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" "" "libavutil = $LIBAVUTIL_VERSION"