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