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