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