mention --target-os in --help
[libav.git] / configure
CommitLineData
abcd6d60 1,#!/bin/sh
0f3cb305 2#
f57620d5
MR
3# FFmpeg configure script
4#
5# Copyright (c) 2000, 2001, 2002 Fabrice Bellard
6# Copyright (c) 2005-2006 Diego Biurrun
7# Copyright (c) 2005-2006 Mans Rullgard
0f3cb305 8#
cf9d24ad 9
cde2d79a 10# make sure we are running under a compatible shell
c21d6325
MR
11# try to make this part work with most shells
12
13try_exec(){
0dbe81bb 14 echo "Trying shell $1"
c21d6325
MR
15 type "$1" >/dev/null 2>&1 && exec "$@"
16}
17
5237ce67 18unset foo
0dbe81bb
MR
19(: ${foo%%bar}) 2>/dev/null
20E1="$?"
21
22(: ${foo?}) 2>/dev/null
23E2="$?"
24
25if test "$E1" != 0 || test "$E2" = 0; then
26 echo "Broken shell detected. Trying alternatives."
c21d6325
MR
27 export FF_CONF_EXEC
28 if test "0$FF_CONF_EXEC" -lt 1; then
29 FF_CONF_EXEC=1
30 try_exec bash "$0" "$@"
31 fi
32 if test "0$FF_CONF_EXEC" -lt 2; then
33 FF_CONF_EXEC=2
34 try_exec ksh "$0" "$@"
35 fi
36 if test "0$FF_CONF_EXEC" -lt 3; then
37 FF_CONF_EXEC=3
38 try_exec /usr/xpg4/bin/sh "$0" "$@"
cde2d79a
MR
39 fi
40 echo "No compatible shell script interpreter found."
fc53da20 41 echo "This configure script requires a POSIX-compatible shell"
c21d6325 42 echo "such as bash or ksh."
505dfb09
DB
43 echo "THIS IS NOT A BUG IN FFMPEG, DO NOT REPORT IT AS SUCH."
44 echo "Instead, install a working POSIX-compatible shell."
45 echo "Disabling this configure test will create a broken FFmpeg."
c21d6325
MR
46 if test "$BASH_VERSION" = '2.04.0(1)-release'; then
47 echo "This bash version ($BASH_VERSION) is broken on your platform."
48 echo "Upgrade to a later version if available."
49 fi
cde2d79a
MR
50 exit 1
51fi
52
74c53c2d
MR
53show_help(){
54 echo "Usage: configure [options]"
55 echo "Options: [defaults in brackets after descriptions]"
56 echo
57 echo "Standard options:"
58 echo " --help print this message"
2ba042a7 59 echo " --log[=FILE|yes|no] log tests and output to FILE [config.err]"
2266e085 60 echo " --prefix=PREFIX install in PREFIX [$PREFIX]"
74c53c2d 61 echo " --libdir=DIR install libs in DIR [PREFIX/lib]"
84c22efd 62 echo " --shlibdir=DIR install shared libs in DIR [PREFIX/lib]"
74c53c2d
MR
63 echo " --incdir=DIR install includes in DIR [PREFIX/include/ffmpeg]"
64 echo " --mandir=DIR install man page in DIR [PREFIX/man]"
74c53c2d
MR
65 echo " --enable-mingw32 enable MinGW native/cross Windows compile"
66 echo " --enable-mingwce enable MinGW native/cross WinCE compile"
74c53c2d
MR
67 echo " --enable-static build static libraries [default=yes]"
68 echo " --disable-static do not build static libraries [default=no]"
69 echo " --enable-shared build shared libraries [default=no]"
70 echo " --disable-shared do not build shared libraries [default=yes]"
dc922953
DB
71 echo " --enable-pp enable GPLed postprocessing support [default=no]"
72 echo " --enable-swscaler software scaler support [default=no]"
74c53c2d 73 echo " --enable-sunmlib use Sun medialib [default=no]"
e5f94c2b
RP
74 echo " --enable-beosthreads use BeOS threads [default=no]"
75 echo " --enable-os2threads use OS/2 threads [default=no]"
74c53c2d 76 echo " --enable-pthreads use pthreads [default=no]"
eb113804 77 echo " --enable-w32threads use Win32 threads [default=no]"
56a059ac 78 echo " --enable-x11grab enable X11 grabbing [default=no]"
74c53c2d
MR
79 echo " --enable-dc1394 enable IIDC-1394 grabbing using libdc1394"
80 echo " and libraw1394 [default=no]"
e2745046
MR
81 echo " --enable-liba52 enable GPLed liba52 support [default=no]"
82 echo " --enable-liba52bin open liba52.so.0 at runtime [default=no]"
8ac17293 83 echo " --enable-avisynth allow reading AVISynth script files [default=no]"
e2745046
MR
84 echo " --enable-libdts enable GPLed libdts support [default=no]"
85 echo " --enable-libfaac enable FAAC support via libfaac [default=no]"
86 echo " --enable-libfaad enable FAAD support via libfaad [default=no]"
87 echo " --enable-libfaadbin build FAAD support with runtime linking [default=no]"
dc922953 88 echo " --enable-libgsm enable GSM support via libgsm [default=no]"
e2745046 89 echo " --enable-libmp3lame enable MP3 encoding via libmp3lame [default=no]"
31235134
DB
90 echo " --enable-libnut enable NUT (de)muxing via libnut,"
91 echo " native demuxer exists [default=no]"
ba5fd8c5 92 echo " --enable-libogg enable Ogg muxing via libogg [default=no]"
71757822 93 echo " --enable-libtheora enable Theora encoding via libtheora [default=no]"
e2745046 94 echo " --enable-libvorbis enable Vorbis en/decoding via libvorbis,"
31235134 95 echo " native implementations exist [default=no]"
dc922953 96 echo " --enable-x264 enable H.264 encoding via x264 [default=no]"
31235134
DB
97 echo " --enable-xvid enable Xvid encoding via xvidcore,"
98 echo " native MPEG-4/Xvid encoder exists [default=no]"
dc922953
DB
99 echo " --enable-amr_nb enable amr_nb float audio codec"
100 echo " --enable-amr_nb-fixed use fixed point for amr-nb codec"
101 echo " --enable-amr_wb enable amr_wb float audio codec"
102 echo " --enable-amr_if2 enable amr_wb IF2 audio codec"
74c53c2d
MR
103 echo " --enable-gpl allow use of GPL code, the resulting libav*"
104 echo " and ffmpeg will be under GPL [default=no]"
105 echo ""
106 echo "Advanced options (experts only):"
107 echo " --source-path=PATH path to source code [$source_path]"
108 echo " --cross-prefix=PREFIX use PREFIX for compilation tools [$cross_prefix]"
fac252f9 109 echo " --cross-compile assume a cross-compiler is used"
abcd6d60 110 echo " --target-os=OS compiler targets OS [$targetos]"
74c53c2d
MR
111 echo " --cc=CC use C compiler CC [$cc]"
112 echo " --make=MAKE use specified make [$make]"
113 echo " --extra-cflags=ECFLAGS add ECFLAGS to CFLAGS [$CFLAGS]"
114 echo " --extra-ldflags=ELDFLAGS add ELDFLAGS to LDFLAGS [$LDFLAGS]"
115 echo " --extra-libs=ELIBS add ELIBS [$ELIBS]"
116 echo " --build-suffix=SUFFIX suffix for application specific build []"
cc6a90dd 117 echo " --arch=ARCH select architecture [$arch]"
7c758d33
DB
118 echo " --cpu=CPU selects the minimum cpu required (affects"
119 echo " instruction selection, may crash on older CPUs)"
2b4c3615 120 echo " --enable-powerpc-perf enable performance report on PPC"
74c53c2d
MR
121 echo " (requires enabling PMC)"
122 echo " --disable-mmx disable MMX usage"
1839e854 123 echo " --disable-armv5te disable armv5te usage"
edab3048 124 echo " --disable-armv6 disable armv6 usage"
74c53c2d
MR
125 echo " --disable-iwmmxt disable iwmmxt usage"
126 echo " --disable-altivec disable AltiVec usage"
127 echo " --disable-audio-oss disable OSS audio support [default=no]"
128 echo " --disable-audio-beos disable BeOS audio support [default=no]"
129 echo " --disable-v4l disable video4linux grabbing [default=no]"
130 echo " --disable-v4l2 disable video4linux2 grabbing [default=no]"
131 echo " --disable-bktr disable bktr video grabbing [default=no]"
132 echo " --disable-dv1394 disable DV1394 grabbing [default=no]"
133 echo " --disable-network disable network support [default=no]"
0c7bb0e5 134 echo " --disable-ipv6 disable ipv6 support [default=no]"
74c53c2d 135 echo " --disable-zlib disable zlib [default=no]"
74c53c2d
MR
136 echo " --disable-vhook disable video hooking support"
137 echo " --enable-gprof enable profiling with gprof [$gprof]"
138 echo " --disable-debug disable debugging symbols"
139 echo " --disable-opts disable compiler optimizations"
78fcba8f 140 echo " --enable-extra-warnings enable more compiler warnings"
74c53c2d
MR
141 echo " --disable-mpegaudio-hp faster (but less accurate)"
142 echo " MPEG audio decoding [default=no]"
143 echo " --disable-protocols disable I/O protocols support [default=no]"
786b30af 144 echo " --disable-ffmpeg disable ffmpeg build"
74c53c2d
MR
145 echo " --disable-ffserver disable ffserver build"
146 echo " --disable-ffplay disable ffplay build"
147 echo " --enable-small optimize for size instead of speed"
148 echo " --enable-memalign-hack emulate memalign, interferes with memory debuggers"
149 echo " --disable-strip disable stripping of executables and shared libraries"
150 echo " --disable-encoder=NAME disables encoder NAME"
151 echo " --enable-encoder=NAME enables encoder NAME"
152 echo " --disable-decoder=NAME disables decoder NAME"
153 echo " --enable-decoder=NAME enables decoder NAME"
154 echo " --disable-encoders disables all encoders"
155 echo " --disable-decoders disables all decoders"
ff70e601
MR
156 echo " --disable-muxer=NAME disables muxer NAME"
157 echo " --enable-muxer=NAME enables muxer NAME"
74c53c2d 158 echo " --disable-muxers disables all muxers"
ff70e601
MR
159 echo " --disable-demuxer=NAME disables demuxer NAME"
160 echo " --enable-demuxer=NAME enables demuxer NAME"
74c53c2d 161 echo " --disable-demuxers disables all demuxers"
af9e7d18
MR
162 echo " --enable-parser=NAME enables parser NAME"
163 echo " --disable-parser=NAME disables parser NAME"
164 echo " --disable-parsers disables all parsers"
74c53c2d
MR
165 echo ""
166 echo "NOTE: Object files are built at the place where configure is launched."
167 exit 1
168}
cf9d24ad 169
57bd82d4
MR
170log(){
171 echo "$@" >>$logfile
172}
173
720c69da 174log_file(){
c8e9f801
MR
175 log BEGIN $1
176 cat -n $1 >>$logfile
177 log END $1
178}
179
2ba042a7 180echolog(){
c8e9f801 181 log "$@"
57bd82d4 182 echo "$@"
2ba042a7
MR
183}
184
185die(){
186 echolog "$@"
187 cat <<EOF
188If you think configure made a mistake, make sure you are using the latest
189version from SVN. If the latest version fails, report the problem to the
190ffmpeg-devel@mplayerhq.hu mailing list or IRC #ffmpeg on irc.freenode.net.
191EOF
720c69da 192 if enabled logging; then
2ba042a7
MR
193 cat <<EOF
194Include the log file "$logfile" produced by configure as this will help
195solving the problem.
196EOF
197 else
198cat <<EOF
199Rerun configure with logging enabled (do not use --log=no), and include the
200log this produces with your report.
201EOF
202 fi
57bd82d4
MR
203 rm -f $TMPC $TMPO $TMPE $TMPS $TMPH
204 exit 1
205}
206
904e48f1 207# "tr '[a-z]' '[A-Z]'" is a workaround for Solaris tr not grokking "tr a-z A-Z"
44161118
MR
208toupper(){
209 echo "$@" | tr '[a-z]' '[A-Z]'
210}
211
a8d04fba
MR
212set_all(){
213 value=$1
214 shift
215 for var in $*; do
216 eval $var=$value
217 done
218}
219
799c9e9b
MR
220pushvar(){
221 for var in $*; do
222 eval level=\${${var}_level:=0}
223 eval ${var}_${level}="\$$var"
224 eval ${var}_level=$(($level+1))
225 done
226}
227
228popvar(){
229 for var in $*; do
230 eval level=\${${var}_level:-0}
231 test $level = 0 && continue
232 eval level=$(($level-1))
233 eval $var="\${${var}_${level}}"
234 eval ${var}_level=$level
235 eval unset ${var}_${level}
236 done
237}
238
a8d04fba
MR
239enable(){
240 set_all yes $*
241}
242
243disable(){
244 set_all no $*
245}
246
57bd82d4 247enabled(){
44161118
MR
248 eval test "x\$$1" = "xyes"
249}
250
37970ebf
RP
251disabled(){
252 eval test "x\$$1" = "xno"
253}
254
44161118
MR
255enabled_all(){
256 for opt; do
257 enabled $opt || return 1
258 done
259}
260
85bca2c5
DB
261disabled_all(){
262 for opt; do
263 disabled $opt || return 1
264 done
265}
266
44161118
MR
267enabled_any(){
268 for opt; do
269 enabled $opt && return 0
270 done
271}
272
85bca2c5
DB
273disabled_any(){
274 for opt; do
275 disabled $opt && return 0
276 done
277}
278
30fd06be
MR
279check_deps(){
280 for cfg; do
799c9e9b
MR
281 enabled ${cfg}_checking && die "Circular dependency for $cfg."
282 disabled ${cfg}_checking && continue
283 enable ${cfg}_checking
284
30fd06be
MR
285 eval dep_all="\$${cfg}_deps"
286 eval dep_any="\$${cfg}_deps_any"
799c9e9b
MR
287
288 pushvar cfg dep_all dep_any
289 check_deps $dep_all $dep_any
290 popvar cfg dep_all dep_any
291
30fd06be
MR
292 enabled_all $dep_all || disable $cfg
293 enabled_any $dep_any || disable $cfg
799c9e9b
MR
294
295 disable ${cfg}_checking
30fd06be
MR
296 done
297}
298
44161118
MR
299print_config(){
300 pfx=$1
301 header=$2
302 makefile=$3
303 shift 3
304 for cfg; do
305 if enabled $cfg; then
306 ucname="${pfx}`toupper $cfg`"
307 echo "#define ${ucname} 1" >> $header
308 echo "${ucname}=yes" >> $makefile
309 fi
310 done
57bd82d4
MR
311}
312
313flags_saved(){
314 (: ${SAVE_CFLAGS?}) 2>/dev/null
315}
316
dcd479c0 317save_flags(){
57bd82d4 318 flags_saved && return
dcd479c0
MR
319 SAVE_CFLAGS="$CFLAGS"
320 SAVE_LDFLAGS="$LDFLAGS"
321 SAVE_extralibs="$extralibs"
322}
323
324restore_flags(){
f5d28d10 325 flags_saved || return
dcd479c0
MR
326 CFLAGS="$SAVE_CFLAGS"
327 LDFLAGS="$SAVE_LDFLAGS"
328 extralibs="$SAVE_extralibs"
329 unset SAVE_CFLAGS
330 unset SAVE_LDFLAGS
331 unset SAVE_extralibs
332}
333
334temp_cflags(){
335 save_flags
336 CFLAGS="$CFLAGS $*"
337}
338
339temp_ldflags(){
340 save_flags
341 LDFLAGS="$LDFLAGS $*"
342}
343
344temp_extralibs(){
345 save_flags
346 extralibs="$extralibs $*"
347}
348
57bd82d4
MR
349append(){
350 var=$1
351 shift
352 flags_saved && eval "SAVE_$var=\"\$SAVE_$var $*\""
353 eval "$var=\"\$$var $*\""
354}
355
356add_cflags(){
357 append CFLAGS "$@"
358}
359
360add_ldflags(){
361 append LDFLAGS "$@"
362}
363
364add_extralibs(){
365 append extralibs "$@"
366}
367
b0cfb663 368check_cmd(){
b3cb5d51 369 log "$@"
9b4f605c 370 "$@" >>$logfile 2>&1
b0cfb663
MR
371}
372
dcd479c0 373check_cc(){
57bd82d4
MR
374 log check_cc "$@"
375 cat >$TMPC
720c69da 376 log_file $TMPC
b0cfb663 377 check_cmd $cc $CFLAGS "$@" -c -o $TMPO $TMPC
57bd82d4
MR
378}
379
380check_cpp(){
381 log check_cpp "$@"
dcd479c0 382 cat >$TMPC
720c69da 383 log_file $TMPC
b0cfb663 384 check_cmd $cc $CFLAGS "$@" -E -o $TMPO $TMPC
dcd479c0
MR
385}
386
387check_ld(){
57bd82d4 388 log check_ld "$@"
0607887f 389 check_cc || return
b0cfb663 390 check_cmd $cc $LDFLAGS "$@" -o $TMPE $TMPO $extralibs
dcd479c0
MR
391}
392
393check_cflags(){
57bd82d4
MR
394 log check_cflags "$@"
395 check_cc "$@" <<EOF && add_cflags "$@"
dcd479c0
MR
396int x;
397EOF
398}
399
400check_ldflags(){
57bd82d4
MR
401 log check_ldflags "$@"
402 check_ld "$@" <<EOF && add_ldflags "$@"
403int main(){
404 return 0;
405}
dcd479c0
MR
406EOF
407}
408
409check_header(){
57bd82d4 410 log check_header "$@"
dcd479c0
MR
411 header=$1
412 shift
d8bc5f06
MR
413 var=`echo $header | sed 's/[^A-Za-z0-9_]/_/g'`
414 disable $var
415 check_cpp "$@" <<EOF && enable $var
dcd479c0
MR
416#include <$header>
417int x;
418EOF
419}
420
421check_func(){
57bd82d4 422 log check_func "$@"
dcd479c0
MR
423 func=$1
424 shift
d8bc5f06
MR
425 disable $func
426 check_ld "$@" <<EOF && enable $func
dcd479c0
MR
427extern int $func();
428int main(){
429 $func();
430}
431EOF
432}
433
57bd82d4
MR
434check_lib(){
435 log check_lib "$@"
436 header="$1"
437 func="$2"
438 shift 2
439 temp_extralibs "$@"
440 check_header $header && check_func $func && add_extralibs "$@"
441 err=$?
442 restore_flags
443 return $err
444}
445
dcd479c0 446check_exec(){
90be59ef 447 check_ld "$@" && { enabled cross_compile || $TMPE >>$logfile 2>&1; }
57bd82d4
MR
448}
449
450require(){
451 name="$1"
452 header="$2"
453 func="$3"
454 shift 3
455 check_lib $header $func "$@" || die "ERROR: $name not found"
dcd479c0
MR
456}
457
c505dd31
MR
458apply(){
459 file=$1
460 shift
461 "$@" < "$file" > "$file.tmp" && mv "$file.tmp" "$file" || rm "$file.tmp"
462}
463
c88f5d72
MR
464CONFIG_LIST='
465 encoders
466 decoders
467 parsers
468 muxers
469 demuxers
c88f5d72
MR
470 amr
471 amr_nb
472 amr_nb_fixed
473 amr_wb
474 audio_beos
475 audio_oss
476 avisynth
477 beos_netserver
478 bktr
479 dc1394
c88f5d72 480 dv1394
c88f5d72
MR
481 ffmpeg
482 ffplay
483 ffserver
484 gpl
ecfc4f44 485 gprof
c88f5d72 486 ipv6
7bc5f2a8 487 liba52
f8904fd9 488 liba52bin
3ffab361 489 libdts
2eed5a46
DB
490 libfaac
491 libfaad
492 libfaadbin
c88f5d72 493 libgsm
6ebe07fb 494 libmp3lame
c88f5d72
MR
495 libnut
496 libogg
150d2772 497 libtheora
c88f5d72
MR
498 libvorbis
499 memalign_hack
c88f5d72
MR
500 mpegaudio_hp
501 network
2b4c3615 502 powerpc_perf
c88f5d72
MR
503 pp
504 protocols
505 swscaler
506 vhook
afde41b4
MR
507 v4l
508 v4l2
860391a5 509 wince
56a059ac 510 x11grab
c88f5d72
MR
511 x264
512 xvid
513 zlib
514'
515
516HAVE_LIST='
1ac9331a 517 altivec
c88f5d72 518 altivec_h
1ac9331a 519 armv5te
edab3048 520 armv6
b265431e 521 beosthreads
c88f5d72 522 byteswap_h
1ac9331a 523 cmov
c88f5d72 524 dcbzl
f8aa696f
DB
525 dev_bktr_ioctl_bt848_h
526 dev_bktr_ioctl_meteor_h
527 dev_ic_bt8xx_h
528 dev_video_meteor_ioctl_meteor_h
529 dev_video_bktr_ioctl_bt848_h
18b67ae5 530 dlfcn_h
c88f5d72 531 dlopen
7073e9fc 532 fast_cmov
c88f5d72 533 freetype2
c88f5d72 534 imlib2
2e1913b1 535 inet_aton
1ac9331a 536 iwmmxt
c88f5d72
MR
537 localtime_r
538 lrintf
f8aa696f
DB
539 machine_ioctl_bt848_h
540 machine_ioctl_meteor_h
c88f5d72
MR
541 malloc_h
542 memalign
543 mlib
1ac9331a
MR
544 mmi
545 mmx
9c914398 546 os2
b265431e
MR
547 os2threads
548 pthreads
c88f5d72
MR
549 sdl
550 sdl_video_size
deb29777 551 soundcard_h
b0c858d8 552 sys_poll_h
deb29777 553 sys_soundcard_h
b265431e
MR
554 threads
555 w32threads
c88f5d72 556'
44161118 557
1ac9331a
MR
558TARGET_LIST='
559 altivec
560 armv5te
51e8750a 561 armv6
1ac9331a
MR
562 iwmmxt
563 mmi
564 mmx
565'
566
520cc7f1
MR
567CMDLINE_SELECT="
568 $CONFIG_LIST
569 $TARGET_LIST
c861e7da 570 amr_if2
520cc7f1
MR
571 debug
572 extra_warnings
573 mingw32
574 shared
575 static
b5ea085b
MR
576 beosthreads
577 os2threads
578 pthreads
579 w32threads
520cc7f1
MR
580"
581
30fd06be 582flashsv_decoder_deps="zlib"
773be23a 583flashsv_encoder_deps="zlib"
30fd06be
MR
584mpeg_xvmc_decoder_deps="xvmc"
585png_decoder_deps="zlib"
586png_encoder_deps="zlib"
587x264_encoder_deps="x264"
588xvid_encoder_deps="xvid"
589zmbv_decoder_deps="zlib"
590zmbv_encoder_deps="zlib"
591
592aac_decoder_deps="libfaad"
593mpeg4aac_decoder_deps="libfaad"
30fd06be
MR
594amr_nb_decoder_deps_any="amr_nb amr_nb_fixed"
595amr_nb_encoder_deps_any="amr_nb amr_nb_fixed"
596amr_wb_decoder_deps="amr_wb"
597amr_wb_encoder_deps="amr_wb"
598dts_decoder_deps="libdts"
599faac_encoder_deps="libfaac"
7bc5f2a8 600liba52_decoder_deps="liba52"
299c77d5
MR
601libgsm_decoder_deps="libgsm"
602libgsm_encoder_deps="libgsm"
150d2772 603libtheora_encoder_deps="libtheora"
30fd06be
MR
604mp3lame_encoder_deps="libmp3lame"
605oggvorbis_decoder_deps="libvorbis"
606oggvorbis_encoder_deps="libvorbis"
607
608audio_demuxer_deps_any="audio_oss audio_beos"
609audio_muxer_deps_any="audio_oss audio_beos"
610dc1394_demuxer_deps="dc1394"
611dv1394_demuxer_deps="dv1394"
612gxf_muxer_deps="gpl"
d7c59247
DB
613libnut_demuxer_deps="libnut"
614libnut_muxer_deps="libnut"
30fd06be
MR
615ogg_muxer_deps="libogg"
616redir_demuxer_deps="network"
617rtp_muxer_deps="network"
618rtsp_demuxer_deps="network"
619sdp_demuxer_deps="network"
afde41b4
MR
620v4l2_demuxer_deps="v4l2"
621video_grab_device_demuxer_deps_any="v4l bktr"
30fd06be
MR
622x11_grab_device_demuxer_deps="x11grab"
623
fa859b4d 624ffplay_deps="sdl"
a2830dca 625ffserver_deps="network protocols muxers"
f6f69c30 626network_deps="protocols"
a2830dca 627
0f3cb305 628# set temporary file name
57514323 629if test ! -z "$TMPDIR" ; then
0f3cb305 630 TMPDIR1="${TMPDIR}"
57514323 631elif test ! -z "$TEMPDIR" ; then
0f3cb305 632 TMPDIR1="${TEMPDIR}"
3d204385 633else
0f3cb305 634 TMPDIR1="/tmp"
3d204385
NK
635fi
636
0f3cb305
FB
637TMPC="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.c"
638TMPO="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.o"
f3ec2d46 639TMPE="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}"
0f3cb305
FB
640TMPS="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.S"
641TMPH="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.h"
642
de6d9b64 643# default parameters
8a608357 644
720c69da 645logging="yes"
2ba042a7 646logfile="config.err"
8a608357
MR
647
648# installation paths
2266e085
DB
649PREFIX="/usr/local"
650libdir='${PREFIX}/lib'
84c22efd 651shlibdir="$libdir"
2266e085
DB
652incdir='${PREFIX}/include/ffmpeg'
653mandir='${PREFIX}/man'
654bindir='${PREFIX}/bin'
8a608357
MR
655
656# toolchain
0f3cb305 657cross_prefix=""
fac252f9 658cross_compile="no"
de6d9b64
FB
659cc="gcc"
660ar="ar"
be7109c1 661ranlib="ranlib"
4a908fbc 662make="make"
0f3cb305 663strip="strip"
8a608357
MR
664asmalign_pot="unknown"
665
666# machine
cc6a90dd 667arch=`uname -m`
38d0a8aa 668cpu="generic"
e45a2872 669powerpc_perf="no"
0f3cb305 670mmx="default"
e7768fc5 671cmov="no"
7073e9fc 672fast_cmov="no"
1839e854 673armv5te="default"
edab3048 674armv6="default"
eba9ae3c 675iwmmxt="default"
ab6c65f6 676altivec="default"
87ea51e0 677dcbzl="no"
d46aba26 678mmi="default"
8a608357
MR
679bigendian="no"
680
8a608357 681# OS
c597172e 682targetos=`uname -s`
8a608357
MR
683beos_netserver="no"
684mingw32="no"
685os2="no"
686wince="no"
687
688# non-library system interfaces
c597172e 689audio_beos="default"
8a608357 690audio_oss="yes"
3eac5c63 691bktr="yes"
8aa3ee32 692dv1394="yes"
afde41b4
MR
693v4l2="yes"
694v4l="yes"
8a608357
MR
695
696# libraries
697amr_if2="no"
698amr_nb="no"
699amr_nb_fixed="no"
700amr_wb="no"
701avisynth="no"
f02be79d 702dc1394="no"
8a608357
MR
703dlfcn_h="no"
704dlopen="no"
7bc5f2a8 705liba52="no"
f8904fd9 706liba52bin="no"
dc922953 707libdts="no"
2eed5a46 708libfaac="no"
a2234ceb 709libfaad2="no"
8a608357 710libfaad="no"
2eed5a46 711libfaadbin="no"
bb4c2140 712libgsm="no"
6ebe07fb 713libmp3lame="no"
f956e129 714libnut="no"
9146ca37 715libogg="no"
150d2772 716libtheora="no"
be74741c 717libvorbis="no"
8a608357
MR
718mlib="no"
719x11grab="no"
6662ec29 720x264="no"
8a608357
MR
721xvid="no"
722zlib="yes"
723
724# configurable options
cddf3f45 725debug="yes"
65d1bea2 726dostrip="yes"
5af4e0cc 727extra_warnings="no"
8a608357
MR
728ffmpeg="yes"
729ffplay="yes"
730ffserver="yes"
731gpl="no"
732gprof="no"
733ipv6="yes"
5af4e0cc
MR
734shared="no"
735static="yes"
8a608357 736memalign_hack="no"
1eb2212e 737mpegaudio_hp="yes"
8a608357
MR
738network="yes"
739optimize="yes"
740pp="no"
741protocols="yes"
742swscaler="no"
743vhook="default"
744
745# threading
746beosthreads="no"
747os2threads="no"
748pthreads="no"
749w32threads="no"
750thread_type="no"
751
752# build settings
baa3a937 753SHFLAGS='-shared -Wl,-soname,$@'
cab3ef82 754VHOOKSHFLAGS='$(SHFLAGS)'
80581e98 755LIBOBJFLAGS=""
e89b8b0a 756FFLDFLAGS=-Wl,--warn-common
e240ee67 757LDLATEFLAGS='-Wl,-rpath-link,\$(BUILD_ROOT)/libavcodec -Wl,-rpath-link,\$(BUILD_ROOT)/libavformat -Wl,-rpath-link,\$(BUILD_ROOT)/libavutil'
c536cb09 758FFSERVERLDFLAGS=-Wl,-E
f39e56a8 759LDCONFIG="ldconfig"
f3ec2d46
SG
760LIBPREF="lib"
761LIBSUF=".a"
4bdd05e7 762LIB='$(LIBPREF)$(NAME)$(LIBSUF)'
f3ec2d46
SG
763SLIBPREF="lib"
764SLIBSUF=".so"
4bdd05e7 765SLIBNAME='$(SLIBPREF)$(NAME)$(SLIBSUF)'
b29bddab
DB
766SLIBNAME_WITH_VERSION='$(SLIBNAME).$(LIBVERSION)'
767SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
951bf3e6 768EXESUF=""
eb94aca9 769BUILDSUF=""
d4596ae3 770LIB_INSTALL_EXTRA_CMD='$(RANLIB) "$(libdir)/$(LIB)"'
ef0bc4c9 771
c597172e
MR
772# find source path
773source_path="`dirname \"$0\"`"
774source_path_used="yes"
775if test -z "$source_path" -o "$source_path" = "." ; then
776 source_path="`pwd`"
777 source_path_used="no"
778else
779 source_path="`cd \"$source_path\"; pwd`"
780 echo "$source_path" | grep -q '[[:blank:]]' &&
781 die "Out of tree builds are impossible with whitespace in source path."
782fi
783
784if test x"$1" = x"-h" -o x"$1" = x"--help" ; then
785 show_help
786fi
787
788FFMPEG_CONFIGURATION="$@"
789
790ENCODER_LIST=`sed -n 's/^[^#]*ENC.*, *\(.*\)).*/\1_encoder/p' "$source_path/libavcodec/allcodecs.c"`
791DECODER_LIST=`sed -n 's/^[^#]*DEC.*, *\(.*\)).*/\1_decoder/p' "$source_path/libavcodec/allcodecs.c"`
792PARSER_LIST=`sed -n 's/^[^#]*PARSER.*, *\(.*\)).*/\1_parser/p' "$source_path/libavcodec/allcodecs.c"`
793MUXER_LIST=`sed -n 's/^[^#]*_MUX.*, *\(.*\)).*/\1_muxer/p' "$source_path/libavformat/allformats.c"`
794DEMUXER_LIST=`sed -n 's/^[^#]*DEMUX.*, *\(.*\)).*/\1_demuxer/p' "$source_path/libavformat/allformats.c"`
795
796enable $ENCODER_LIST $DECODER_LIST $PARSER_LIST $MUXER_LIST $DEMUXER_LIST
797
798die_unknown(){
799 echo "Unknown option \"$1\"."
800 echo "See $0 --help for available options."
801 exit 1
802}
803
804for opt do
805 optval="${opt#*=}"
806 case "$opt" in
807 --log)
808 ;;
809 --log=*) logging="$optval"
810 ;;
811 --prefix=*) PREFIX="$optval"
812 ;;
813 --libdir=*) libdir="$optval"
814 ;;
815 --shlibdir=*) shlibdir="$optval"
816 ;;
817 --incdir=*) incdir="$optval"
818 ;;
819 --mandir=*) mandir="$optval"
820 ;;
821 --source-path=*) source_path="$optval"
822 ;;
823 --cross-prefix=*) cross_prefix="$optval"
824 ;;
825 --cross-compile) cross_compile="yes"
826 ;;
827 --target-os=*) targetos="$optval"
828 ;;
829 --cc=*) cc="$optval"
830 ;;
831 --make=*) make="$optval"
832 ;;
833 --extra-cflags=*) add_cflags "$optval"
834 ;;
835 --extra-ldflags=*) add_ldflags "$optval"
836 ;;
837 --extra-libs=*) add_extralibs "$optval"
838 ;;
839 --build-suffix=*) BUILDSUF="$optval"
840 ;;
841 --arch=*) arch="$optval"
842 ;;
843 --cpu=*) cpu="$optval"
844 ;;
845 --enable-mingwce) wince="yes"
846 ;;
847 --disable-opts) optimize="no"
848 ;;
849 --enable-small) optimize="small"
850 ;;
851 --enable-sunmlib) mlib="yes"
852 ;;
853 --disable-strip) dostrip="no"
854 ;;
855 --disable-encoders) disable $ENCODER_LIST
856 ;;
857 --disable-decoders) disable $DECODER_LIST
858 ;;
859 --disable-muxers) disable $MUXER_LIST
860 ;;
861 --disable-demuxers) disable $DEMUXER_LIST
862 ;;
863 --disable-parsers) disable $PARSER_LIST
864 ;;
865 --enable-*=*|--disable-*=*)
866 eval `echo "$opt" | sed 's/=/-/;s/--/action=/;s/-/ thing=/;s/-/ name=/'`
867 case "$thing" in
868 encoder|decoder|muxer|demuxer|parser) $action ${optval}_${thing} ;;
869 *) die_unknown "$opt" ;;
870 esac
871 ;;
872 --enable-?*|--disable-?*)
873 eval `echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g'`
874 echo "$CMDLINE_SELECT" | grep -q "^ *$option\$" || die_unknown $opt
875 $action $option
876 ;;
877 --help) show_help
878 ;;
879 *)
880 die_unknown $opt
881 ;;
882 esac
883done
884
270739bb
MR
885case "$arch" in
886 i386|i486|i586|i686|i86pc|BePC)
887 arch="x86_32"
888 ;;
889 x86_64|amd64)
890 arch="x86_32"
891 canon_arch="`$cc -dumpmachine | sed -e 's,\([^-]*\)-.*,\1,'`"
892 if [ x"$canon_arch" = x"x86_64" -o x"$canon_arch" = x"amd64" ]; then
893 if [ -z "`echo $CFLAGS | grep -- -m32`" ]; then
894 arch="x86_64"
895 fi
896 fi
897 ;;
898 # armv4l is a subset of armv[567]*l
899 arm|armv[4567]*l)
900 arch="armv4l"
901 ;;
902 alpha)
903 arch="alpha"
904 ;;
905 "Power Macintosh"|ppc|ppc64|powerpc)
906 arch="powerpc"
907 ;;
908 mips|mipsel|IP*)
909 arch="mips"
910 ;;
911 sun4u|sparc64)
912 arch="sparc64"
913 ;;
914 sparc)
915 arch="sparc"
916 ;;
917 sh4)
918 arch="sh4"
919 ;;
920 parisc|parisc64)
921 arch="parisc"
922 ;;
923 s390|s390x)
924 arch="s390"
925 ;;
926 m68k)
927 arch="m68k"
928 ;;
929 ia64)
930 arch="ia64"
931 ;;
932 bfin)
933 arch="bfin"
934 ;;
935 *)
936 arch="unknown"
937 ;;
938esac
939
ef0bc4c9 940# OS specific
c597172e 941osextralibs="-lm"
ef0bc4c9 942case $targetos in
74cec57d
FR
943 BeOS|Haiku|Zeta)
944 PREFIX="$HOME/config"
d474299a
MR
945 # helps building libavcodec
946 add_cflags "-DPIC -fomit-frame-pointer"
947 # 3 gcc releases known for BeOS, each with ugly bugs
948 gcc_version="`$cc -v 2>&1 | grep version | cut -d ' ' -f3-`"
949 case "$gcc_version" in
950 2.9-beos-991026*|2.9-beos-000224*) echo "R5/GG gcc"
951 mmx="no"
952 ;;
953 *20010315*) echo "BeBits gcc"
954 add_cflags "-fno-expensive-optimizations"
955 ;;
956 esac
74cec57d 957 LDCONFIG="echo ignoring ldconfig"
d474299a
MR
958 SHFLAGS=-nostart
959 # disable Linux things
d474299a
MR
960 dv1394="no"
961 # enable BeOS things
c597172e 962 disabled audio_beos || enable_audio_beos
d474299a
MR
963 # no need for libm, but the inet stuff
964 # Check for BONE
74cec57d 965 # XXX: actually should check for NOT net_server
d474299a 966 if (echo $BEINCLUDES|grep 'headers/be/bone' >/dev/null); then
c597172e 967 osextralibs="-lbind -lsocket"
d474299a
MR
968 else
969 beos_netserver="yes"
c597172e 970 osextralibs="-lnet"
d474299a
MR
971 fi ;;
972 SunOS)
d474299a 973 dv1394="no"
d474299a
MR
974 FFLDFLAGS=""
975 FFSERVERLDFLAGS=""
976 SHFLAGS="-shared -Wl,-h,\$@"
977 add_extralibs "-lsocket -lnsl"
978 ;;
979 NetBSD)
d474299a 980 dv1394="no"
d474299a
MR
981 add_extralibs "-lossaudio"
982 ;;
983 OpenBSD)
d474299a
MR
984 dv1394="no"
985 need_memalign="no"
d474299a
MR
986 LIBOBJFLAGS="\$(PIC)"
987 LDCONFIG="ldconfig -m \$(shlibdir)"
988 SHFLAGS='-shared'
989 SLIBNAME='$(SLIBPREF)$(NAME)$(SLIBSUF).$(LIBVERSION)'
990 SLIBNAME_WITH_VERSION='$(SLIBNAME)'
991 SLIBNAME_WITH_MAJOR='$(SLIBNAME)'
992 add_extralibs "-lossaudio"
993 ;;
994 FreeBSD)
d474299a 995 dv1394="no"
d474299a
MR
996 need_memalign="no"
997 add_cflags "-pthread"
998 ;;
999 GNU/kFreeBSD)
d474299a
MR
1000 dv1394="no"
1001 add_cflags "-pthread"
1002 ;;
1003 BSD/OS)
d474299a 1004 dv1394="no"
c597172e 1005 osextralibs="-lpoll -lgnugetopt -lm"
d474299a
MR
1006 strip="strip -d"
1007 ;;
1008 Darwin)
1009 cc="cc"
d474299a
MR
1010 dv1394="no"
1011 need_memalign="no"
1012 SHFLAGS="-dynamiclib -Wl,-single_module -Wl,-install_name,\$(shlibdir)/\$(SLIBNAME),-current_version,\$(SPPVERSION),-compatibility_version,\$(SPPVERSION) -Wl,-read_only_relocs,suppress"
1013 VHOOKSHFLAGS='-dynamiclib -Wl,-single_module -flat_namespace -undefined suppress -Wl,-install_name,$(shlibdir)/vhook/$@'
c597172e 1014 osextralibs=""
d474299a
MR
1015 strip="strip -x"
1016 FFLDFLAGS="-Wl,-dynamic,-search_paths_first"
1017 SLIBSUF=".dylib"
1018 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME).$(LIBVERSION)$(SLIBSUF)'
1019 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(NAME).$(LIBMAJOR)$(SLIBSUF)'
1020 FFSERVERLDFLAGS=-Wl,-bind_at_load
1021 ;;
1022 MINGW32*)
d474299a 1023 mingw32="yes"
4ec9ec81
MR
1024 if enabled_all shared static; then
1025 cat <<EOF
1026You can only build one library type at once on MinGW.
1027Specify --disable-static --enable-shared to only build
1028the shared libraries. To build only the static libraries
1029you do not need to pass additional options.
1030EOF
1031 exit 1
1032 fi
1033 dv1394="no"
1034 ffserver="no"
1035 network="no"
1036 if enabled wince; then
1037 protocols="no"
1038 fi
1039 SLIBPREF=""
1040 SLIBSUF=".dll"
1041 EXESUF=".exe"
1042 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)'
1043 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(NAME)-$(LIBMAJOR)$(SLIBSUF)'
1044 SLIB_EXTRA_CMD="-lib /machine:i386 /def:\$(@:${SLIBSUF}=.def)"
1045 SLIB_INSTALL_EXTRA_CMD="-install -m 644 \$(SLIBNAME_WITH_MAJOR:\$(SLIBSUF)=.lib) \"\$(shlibdir)/\$(SLIBNAME_WITH_MAJOR:\$(SLIBSUF)=.lib)\""
1046 SHFLAGS="-shared -Wl,--output-def,\$(@:${SLIBSUF}=.def),--out-implib,lib\$(SLIBNAME:\$(SLIBSUF)=.dll.a) -Wl,--enable-runtime-pseudo-reloc"
d474299a
MR
1047 ;;
1048 CYGWIN*)
1049 targetos=CYGWIN
1050 shlibdir="$bindir"
d474299a
MR
1051 dv1394="no"
1052 VHOOKSHFLAGS='-shared -L$(BUILD_ROOT)/libavformat -L$(BUILD_ROOT)/libavcodec -L$(BUILD_ROOT)/libavutil'
1053 VHOOKLIBS='-lavformat$(BUILDSUF) -lavcodec$(BUILDSUF) -lavutil$(BUILDSUF) $(EXTRALIBS)'
c597172e 1054 osextralibs=""
d474299a
MR
1055 EXESUF=".exe"
1056 SLIBPREF="cyg"
1057 SLIBSUF=".dll"
1058 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)'
1059 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(NAME)-$(LIBMAJOR)$(SLIBSUF)'
1060 SHFLAGS='-shared -Wl,--out-implib=lib$(NAME).dll.a'
1061 ;;
1062 Linux)
1063 LDLATEFLAGS="-Wl,--as-needed $LDLATEFLAGS"
1064 ;;
1065 IRIX*)
1066 targetos=IRIX
1067 ranlib="echo ignoring ranlib"
d474299a
MR
1068 ;;
1069 OS/2)
1070 TMPE=$TMPE".exe"
1071 ar="emxomfar -p128"
1072 ranlib="echo ignoring ranlib"
1073 strip="echo ignoring strip"
1074 add_cflags "-Zomf"
1075 FFLDFLAGS="-Zomf -Zstack 16384 -s"
1076 SHFLAGS="-Zdll -Zomf"
1077 FFSERVERLDFLAGS=""
1078 LIBPREF=""
1079 LIBSUF=".lib"
1080 SLIBPREF=""
1081 SLIBSUF=".dll"
1082 EXESUF=".exe"
c597172e 1083 osextralibs=""
d474299a 1084 pkg_requires=""
d474299a
MR
1085 dv1394="no"
1086 ffserver="no"
1087 vhook="no"
1088 os2="yes"
1089 ;;
1090 *)
1091 targetos="${targetos}-UNKNOWN"
1092 ;;
ef0bc4c9 1093esac
de6d9b64 1094
c597172e 1095add_extralibs $osextralibs
de6d9b64 1096
e3c00e34 1097if ! disabled logging ; then
90be59ef 1098 enabled logging || logfile="$logging"
57bd82d4
MR
1099 echo "# $0 $@" >$logfile
1100 set >>$logfile
2ba042a7
MR
1101else
1102 logfile=/dev/null
57bd82d4 1103fi
e89b8b0a 1104
28d8e661
DB
1105# Combine FFLDFLAGS and the LDFLAGS environment variable.
1106LDFLAGS="$FFLDFLAGS $LDFLAGS"
e89b8b0a 1107
fac252f9 1108test -n "$cross_prefix" && cross_compile=yes
1ea46bed
MR
1109cc="${cross_prefix}${cc}"
1110ar="${cross_prefix}${ar}"
1111ranlib="${cross_prefix}${ranlib}"
1112strip="${cross_prefix}${strip}"
1113
320d060a 1114# we need to build at least one lib type
5af4e0cc 1115if disabled_all static shared; then
320d060a
DB
1116 cat <<EOF
1117At least one library type must be built.
1118Specify --enable-static to build the static libraries or --enable-shared to
1119build the shared libraries as well. To only build the shared libraries specify
1120--disable-static in addition to --enable-shared.
1121EOF
1122 exit 1;
1123fi
1124
ddf50e4c
RP
1125if disabled libogg; then
1126 enabled libtheora && die "libogg must be enabled to enable libtheora."
1127 enabled libvorbis && die "libogg must be enabled to enable libvorbis."
5c5dea3f
NB
1128fi
1129
a2234ceb
RP
1130if enabled_any libfaad libfaadbin ; then
1131 if check_header faad.h; then
1132 check_cc << EOF
1133#include <faad.h>
1134#ifndef FAAD2_VERSION
1135ok faad1
1136#endif
1137int main( void ) { return 0; }
1138EOF
1139 test $? = 0 && enable libfaad2
1140 else
ff3dac65 1141 die "FAAD test failed."
a2234ceb
RP
1142 fi
1143fi
1144
1145
47f9cc15 1146if disabled gpl ; then
54118497
RP
1147 die_gpl_disabled(){
1148 name=$1
1149 shift
1150 enabled_any $@ && die "$name is under GPL and --enable-gpl is not specified."
1151 }
1152 die_gpl_disabled "The Postprocessing code" pp
7bc5f2a8 1153 die_gpl_disabled "liba52" liba52
54118497
RP
1154 die_gpl_disabled "libxvidcore" xvid
1155 die_gpl_disabled "x264" x264
1156 die_gpl_disabled "libdts" libdts
1157 die_gpl_disabled "FAAD2" libfaad2
1158 die_gpl_disabled "The X11 grabber" x11grab
1159 die_gpl_disabled "The software scaler" swscaler
ebb810d9 1160fi
b2e3c528 1161
29799f8b 1162# compute MMX state
0f3cb305 1163if test $mmx = "default"; then
419b8784 1164 if test $arch = "x86_32" -o $arch = "x86_64"; then
0f3cb305
FB
1165 mmx="yes"
1166 else
1167 mmx="no"
1168 fi
1169fi
1170
5d323602
MR
1171test -z "$need_memalign" && need_memalign="$mmx"
1172
cf9d24ad 1173#Darwin CC versions
75388c74 1174needmdynamicnopic="no"
cf9d24ad 1175if test $targetos = Darwin; then
b2924696 1176 if test -n "`$cc -v 2>&1 | grep xlc`"; then
30a3e5d4 1177 add_cflags "-qpdf2 -qlanglvl=extc99 -qmaxmem=-1 -qarch=auto -qtune=auto"
cf9d24ad 1178 else
bb270c08
DB
1179 gcc_version="`$cc -v 2>&1 | grep version | cut -d ' ' -f3-`"
1180 case "$gcc_version" in
1181 *2.95*)
30a3e5d4 1182 add_cflags "-no-cpp-precomp -pipe"
bb270c08
DB
1183 ;;
1184 *[34].*)
30a3e5d4 1185 add_cflags "-no-cpp-precomp -pipe -force_cpusubtype_ALL -Wno-sign-compare"
5af4e0cc 1186 if disabled shared; then
bb270c08
DB
1187 needmdynamicnopic="yes"
1188 fi
1189 ;;
1190 *)
30a3e5d4 1191 add_cflags "-no-cpp-precomp -pipe"
5af4e0cc 1192 if disabled shared; then
bb270c08
DB
1193 needmdynamicnopic="yes"
1194 fi
1195 ;;
1196 esac
cf9d24ad 1197 fi
2a1a6b64
MN
1198fi
1199
703afd07 1200disabled optimize || add_cflags -fomit-frame-pointer
cf9d24ad 1201
ab6c65f6
BF
1202# Can only do AltiVec on PowerPC
1203if test $altivec = "default"; then
cc6a90dd 1204 if test $arch = "powerpc"; then
ab6c65f6
BF
1205 altivec="yes"
1206 else
1207 altivec="no"
1208 fi
1209fi
1210
a4adb608 1211# Add processor-specific flags
9007f514 1212POWERPCMODE="32bits"
38d0a8aa 1213if test $cpu != "generic"; then
bc8ec47b
MR
1214 warn_altivec(){
1215 $1 altivec && echo "WARNING: Tuning for $2 but AltiVec $1.";
1658bc4f 1216 }
38d0a8aa 1217 case $cpu in
bb270c08 1218 601|ppc601|PowerPC601)
1c5d830c 1219 add_cflags "-mcpu=601"
bc8ec47b 1220 warn_altivec enabled PPC601
bb270c08
DB
1221 ;;
1222 603*|ppc603*|PowerPC603*)
1c5d830c 1223 add_cflags "-mcpu=603"
bc8ec47b 1224 warn_altivec enabled PPC603
bb270c08
DB
1225 ;;
1226 604*|ppc604*|PowerPC604*)
1c5d830c 1227 add_cflags "-mcpu=604"
bc8ec47b 1228 warn_altivec enabled PPC604
bb270c08
DB
1229 ;;
1230 G3|g3|75*|ppc75*|PowerPC75*)
1c5d830c 1231 add_cflags "-mcpu=750 -mpowerpc-gfxopt"
bc8ec47b 1232 warn_altivec enabled PPC75x
bb270c08
DB
1233 ;;
1234 G4|g4|745*|ppc745*|PowerPC745*)
1c5d830c 1235 add_cflags "-mcpu=7450 -mpowerpc-gfxopt"
bc8ec47b 1236 warn_altivec disabled PPC745x
bb270c08
DB
1237 ;;
1238 74*|ppc74*|PowerPC74*)
1c5d830c 1239 add_cflags "-mcpu=7400 -mpowerpc-gfxopt"
bc8ec47b 1240 warn_altivec disabled PPC74xx
bb270c08
DB
1241 ;;
1242 G5|g5|970|ppc970|PowerPC970|power4*|Power4*)
1c5d830c 1243 add_cflags "-mcpu=970 -mpowerpc-gfxopt -mpowerpc64"
bc8ec47b 1244 warn_altivec disabled PPC970
9007f514 1245 POWERPCMODE="64bits"
bb270c08 1246 ;;
e7768fc5
GP
1247 # targets that do NOT support conditional mov (cmov)
1248 i[345]86|pentium|pentium-mmx|k6|k6-[23]|winchip-c6|winchip2|c3)
38d0a8aa 1249 add_cflags "-march=$cpu"
e7768fc5
GP
1250 cmov="no"
1251 ;;
1252 # targets that do support conditional mov (cmov)
416519dd 1253 i686|pentiumpro|pentium[23]|pentium-m|athlon|athlon-tbird|athlon-4|athlon-[mx]p|athlon64|k8|opteron|athlon-fx|core2)
e7768fc5 1254 add_cflags "-march=$cpu"
4c8d81fa 1255 cmov="yes"
7073e9fc 1256 fast_cmov="yes"
94e4c3a3
GP
1257 ;;
1258 # targets that do support conditional mov but on which it's slow
1259 pentium4|prescott|nocona)
1260 add_cflags "-march=$cpu"
1261 cmov="yes"
7073e9fc 1262 fast_cmov="no"
bb270c08 1263 ;;
d7b34d08 1264 sparc64)
1c5d830c 1265 add_cflags "-mcpu=v9"
d7b34d08 1266 ;;
bb270c08 1267 *)
38d0a8aa 1268 echo "WARNING: Unknown CPU \"$cpu\", ignored."
bb270c08 1269 ;;
a4adb608
MN
1270 esac
1271fi
1272
412c1562
MR
1273gnu_make(){
1274 $1 --version 2>&1 | grep -q GNU
1275}
1276
1277if ! gnu_make $make; then
1278 gnu_make gmake && make=gmake || die "GNU make not found."
1279fi
1280
be0d52ab
MR
1281# make sure we can execute files in $TMPDIR
1282cat >$TMPE 2>>$logfile <<EOF
1283#! /bin/sh
1284EOF
1285chmod +x $TMPE >>$logfile 2>&1
1286if ! $TMPE >>$logfile 2>&1; then
1287 cat <<EOF
1288Unable to create and execute files in $TMPDIR1. Set the TMPDIR environment
68300911
DB
1289variable to another directory and make sure that $TMPDIR1 is not mounted
1290noexec.
be0d52ab
MR
1291EOF
1292 die "Sanity test failed."
1293fi
0244f743 1294rm $TMPE
be0d52ab 1295
1a268acc
MR
1296# compiler sanity check
1297check_exec <<EOF
1298int main(){
1299 return 0;
1300}
1301EOF
1302if test "$?" != 0; then
1303 echo "$cc is unable to create an executable file."
d6ceace3 1304 if test -z "$cross_prefix" && disabled cross_compile ; then
1a268acc 1305 echo "If $cc is a cross-compiler, use the --cross-compile option."
c7ae6345 1306 echo "Only do this if you know what cross compiling means."
1a268acc
MR
1307 fi
1308 die "C compiler test failed."
1309fi
1310
87ea51e0
LB
1311# check for assembler specific support
1312
cc6a90dd 1313if test $arch = "powerpc"; then
87ea51e0
LB
1314check_cc <<EOF && dcbzl=yes
1315int main(void) {
1316 register long zero = 0;
1317 char data[1024];
1318 asm volatile("dcbzl %0, %1" : : "b" (data), "r" (zero));
1319return 0;
1320}
1321EOF
1322fi
1323
57bd82d4
MR
1324# check for SIMD availability
1325
115329f1 1326# AltiVec flags: The FSF version of GCC differs from the Apple version
cc6a90dd 1327if test $arch = "powerpc"; then
90be59ef 1328 if enabled altivec; then
b2924696 1329 if test -n "`$cc -v 2>&1 | grep version | grep Apple`"; then
30a3e5d4 1330 add_cflags "-faltivec"
b6e52719 1331 else
30a3e5d4 1332 add_cflags "-maltivec -mabi=altivec"
b6e52719
MD
1333 fi
1334 fi
1335fi
1336
0701ca7f 1337check_header altivec.h
a9a07762 1338
29799f8b 1339# check if our compiler supports Motorola AltiVec C API
90be59ef
RP
1340if enabled altivec; then
1341 if enabled altivec_h; then
f25fc9b1
MR
1342 inc_altivec_h="#include <altivec.h>"
1343 else
1344 inc_altivec_h=
1345 fi
1346 check_cc <<EOF || altivec=no
dcd479c0 1347$inc_altivec_h
a9a07762
MN
1348int main(void) {
1349 vector signed int v1, v2, v3;
1350 v1 = vec_add(v2,v3);
1351 return 0;
1352}
1353EOF
1354fi
ab6c65f6 1355
854fdb51 1356# check armv5te instructions support
cc6a90dd 1357if test $armv5te = "default" -a $arch = "armv4l"; then
854fdb51
MR
1358 armv5te=no
1359 check_cc <<EOF && armv5te=yes
1360 int main(void) {
1361 __asm__ __volatile__ ("qadd r0, r0, r0");
1362 }
1363EOF
1364fi
1365
edab3048
MR
1366if test $armv6 = "default" -a $arch = "armv4l"; then
1367 check_cc <<EOF && armv6=yes || armv6=no
1368int main(void) {
1369 __asm__ __volatile__ ("sadd16 r0, r0, r0");
1370}
1371EOF
1372fi
1373
854fdb51 1374# check iwmmxt support
cc6a90dd 1375if test $iwmmxt = "default" -a $arch = "armv4l"; then
854fdb51
MR
1376 iwmmxt=no
1377 check_cc <<EOF && iwmmxt=yes
1378 int main(void) {
1379 __asm__ __volatile__ ("wunpckelub wr6, wr4");
1380 }
1381EOF
1382fi
1383
29799f8b 1384# mmi only available on mips
d46aba26 1385if test $mmi = "default"; then
cc6a90dd 1386 if test $arch = "mips"; then
d46aba26
LS
1387 mmi="yes"
1388 else
1389 mmi="no"
1390 fi
1391fi
1392
29799f8b 1393# check if our compiler supports mmi
57bd82d4 1394enabled mmi && check_cc <<EOF || mmi="no"
d46aba26
LS
1395int main(void) {
1396 __asm__ ("lq \$2, 0(\$2)");
1397 return 0;
1398}
1399EOF
57bd82d4 1400
57bd82d4
MR
1401# ---
1402# big/little-endian test
37970ebf 1403if disabled cross_compile; then
57bd82d4 1404 check_ld <<EOF || die "endian test failed" && $TMPE && bigendian="yes"
a3999908
MN
1405#include <inttypes.h>
1406int main(int argc, char ** argv){
bb270c08
DB
1407 volatile uint32_t i=0x01234567;
1408 return (*((uint8_t*)(&i))) == 0x67;
a3999908
MN
1409}
1410EOF
487a54d7 1411else
f25fc9b1 1412 # programs cannot be launched if cross compiling, so make a static guess
cc6a90dd 1413 if test "$arch" = "powerpc" -o "$arch" = "mips" ; then
f25fc9b1
MR
1414 bigendian="yes"
1415 fi
487a54d7
FB
1416fi
1417
a3999908 1418# ---
3d204385
NK
1419# check availability of some header files
1420
0701ca7f
MR
1421check_header malloc.h
1422check_func memalign
3d204385 1423
797ee6a6 1424if disabled_all memalign memalign_hack && enabled need_memalign ; then
57bd82d4 1425 die "Error, no memalign() but SSE enabled, disable it or use --enable-memalign-hack."
8bf5d58f
MN
1426fi
1427
0701ca7f 1428check_header byteswap.h
47d23bbf 1429
0701ca7f
MR
1430check_func inet_aton
1431check_func localtime_r
57bd82d4 1432enabled zlib && check_lib zlib.h zlibVersion -lz || zlib="no"
57bd82d4 1433
b0c858d8
FR
1434# ffserver uses poll(),
1435# if it's not found we can emulate it using select().
1436if enabled ffserver; then
1437 check_header sys/poll.h
1438fi
1439
57bd82d4
MR
1440# check for some common methods of building with pthread support
1441# do this before the optional library checks as some of them require pthreads
1442if enabled pthreads; then
9e7fd101
MR
1443 if check_func pthread_create; then
1444 :
1445 elif check_func pthread_create -pthread; then
1446 add_cflags -pthread
1447 add_ldflags -pthread
1448 elif check_func pthread_create -pthreads; then
1449 add_cflags -pthreads
1450 add_ldflags -pthreads
1451 elif ! check_lib pthread.h pthread_create -lpthread; then
1452 die "ERROR: can't find pthreads library"
1453 fi
57bd82d4
MR
1454fi
1455
e5f94c2b
RP
1456for thread in pthreads beosthreads os2threads w32threads; do
1457 if enabled $thread; then
e3c00e34 1458 if ! disabled thread_type ; then
e5f94c2b
RP
1459 die "ERROR: Only one thread type must be selected."
1460 else
1461 thread_type="$thread"
1462 fi
1463 fi
1464done
1465
12b61a74
MR
1466enabled_any amr_nb amr_nb_fixed amr_wb amr_if2 && enable amr
1467enabled_all amr_nb amr_nb_fixed &&
1468 die "Only one of amr_nb and amr_nb_fixed may be enabled."
1469
57bd82d4 1470# these are off by default, so fail if requested and not available
7bc5f2a8 1471enabled liba52 && require liba52 a52dec/a52.h a52_init -la52
910c62e1
DB
1472enabled libdts && require libdts dts.h dts_init -ldts -lm
1473enabled libgsm && require libgsm gsm.h gsm_create -lgsm
6ebe07fb 1474enabled libmp3lame && require LAME lame/lame.h lame_init -lmp3lame -lm
910c62e1
DB
1475enabled libtheora && require libtheora theora/theora.h theora_info_init -ltheora -logg
1476enabled libvorbis && require libvorbis vorbis/vorbisenc.h vorbis_info_init -lvorbis -lvorbisenc -logg
1477enabled libogg && require libogg ogg/ogg.h ogg_sync_init -logg
1478enabled libnut && require libnut libnut.h nut_demuxer_init -lnut
1479enabled xvid && require XviD xvid.h xvid_global -lxvidcore
1480enabled x264 && require x264 x264.h x264_encoder_open -lx264
1481enabled dc1394 && require libdc1394 libdc1394/dc1394_control.h dc1394_create_handle -ldc1394_control -lraw1394
1482enabled mlib && require mediaLib mlib_types.h mlib_VectorSub_S16_U8_Mod -lmlib
e0f80bd7 1483
2eed5a46 1484# Ugh, libfaac uses stdcall calling convention on win32 so we can't use
3b9bee88 1485# the generic test functions
2eed5a46 1486if enabled libfaac; then
3b9bee88
MR
1487 save_flags
1488 temp_extralibs -lfaac
1489 check_ld <<EOF && add_extralibs -lfaac || die "ERROR: libfaac not found"
1490#include <stdint.h>
1491#include <faac.h>
1492int main(){
1493 char *id, *cpr;
1494 faacEncGetVersion(&id, &cpr);
1495 return 0;
1496}
1497EOF
1498 restore_flags
1499fi
1500
87f1c97e
MR
1501# Ugh, recent faad2 versions have renamed all functions and #define the
1502# old names in faad.h. Generic tests won't work.
2eed5a46 1503if enabled libfaad; then
87f1c97e
MR
1504 save_flags
1505 temp_extralibs -lfaad
1506 check_ld <<EOF && add_extralibs -lfaad || die "ERROR: libfaad not found"
1507#include <faad.h>
1508int main(){
1509 faacDecOpen();
1510 return 0;
1511}
1512EOF
1513 restore_flags
1514fi
1515
8ac17293
SH
1516# Ugh, avisynth uses WINAPI calls. Generic tests won't work.
1517if enabled avisynth; then
1518 save_flags
1519 temp_extralibs -lvfw32
1520 check_ld <<EOF && add_extralibs -lvfw32 || die "ERROR: vfw32 not found"
1521#include <windows.h>
1522#include <vfw.h>
1523int main(){
1524 AVIFileInit();
1525 return 0;
1526}
1527EOF
1528 restore_flags
1529fi
1530
1531
95e2ce4a 1532# test for lrintf in math.h
fc2b267f 1533check_exec <<EOF && lrintf=yes || lrintf=no
95e2ce4a
MN
1534#define _ISOC9X_SOURCE 1
1535#include <math.h>
1536int main( void ) { return (lrintf(3.999f) > 0)?0:1; }
1537EOF
1538
c13e1abd
FH
1539_restrict=
1540for restrict_keyword in restrict __restrict__ __restrict; do
57bd82d4 1541 check_cc <<EOF && _restrict=$restrict_keyword && break
dcd479c0
MR
1542void foo(char * $restrict_keyword p);
1543EOF
c13e1abd
FH
1544done
1545
a8721c09
FB
1546# dlopen/dlfcn.h probing
1547
0701ca7f 1548check_header dlfcn.h
a8721c09 1549
dcd479c0 1550if check_func dlopen; then
dcd479c0 1551 ldl=
0701ca7f
MR
1552elif check_func dlopen -ldl; then
1553 ldl=-ldl
a8721c09
FB
1554fi
1555
703afd07 1556test "$vhook" = "default" && vhook="$dlopen"
a8721c09 1557
703afd07 1558enabled_any vhook liba52bin libfaadbin && add_extralibs $ldl
bfd2edeb 1559
5af4e0cc 1560if test "$targetos" = "CYGWIN" && enabled static ; then
fbb9d104
VP
1561 vhook="no"
1562 echo
1563 echo "At the moment vhooks don't work on Cygwin static builds."
1564 echo "Patches welcome."
1565 echo
1566fi
1567
8d923001
MR
1568if enabled vhook; then
1569 check_ldflags -rdynamic
1570 check_ldflags -export-dynamic
1571fi
bfd2edeb 1572
703afd07 1573enabled audio_beos && add_extralibs "-lmedia -lbe"
9464f2b8 1574
36c07acd
FR
1575enabled mingw32 && add_extralibs -lws2_32
1576
a86b921c 1577##########################################
29799f8b 1578# imlib check
a86b921c 1579
079dd4ba 1580imlib2=no
ec1e9c44 1581if imlib2-config --version >/dev/null 2>&1; then
1b45e304
VP
1582 temp_cflags `imlib2-config --cflags`
1583 temp_extralibs `imlib2-config --libs`
ec1e9c44 1584 check_lib Imlib2.h imlib_load_font && enable imlib2
929f0347 1585 restore_flags
1b45e304 1586fi
52b41d7f 1587
a86b921c 1588##########################################
29799f8b 1589# FreeType check
a86b921c 1590
04511d53 1591freetype2=no
30f35ab0
MR
1592if freetype-config --version >/dev/null 2>&1; then
1593 temp_cflags `freetype-config --cflags`
1594 temp_extralibs `freetype-config --libs`
1595 check_lib ft2build.h FT_Init_FreeType && enable freetype2
1596 restore_flags
04511d53
PG
1597fi
1598
a86b921c 1599##########################################
29799f8b 1600# SDL check
a86b921c 1601
a86b921c
FB
1602sdl_too_old=no
1603sdl=no
6a1a892f 1604SDL_CONFIG="${cross_prefix}sdl-config"
225e21ef
MR
1605if "${SDL_CONFIG}" --version >/dev/null 2>&1; then
1606 sdl_cflags=`"${SDL_CONFIG}" --cflags`
1607 temp_cflags $sdl_cflags
dcd479c0 1608 temp_extralibs `"${SDL_CONFIG}" --libs`
225e21ef 1609 if check_lib SDL.h SDL_Init; then
dcd479c0 1610 _sdlversion=`"${SDL_CONFIG}" --version | sed 's/[^0-9]//g'`
29f3b38a 1611 if test "$_sdlversion" -lt 121 ; then
dcd479c0
MR
1612 sdl_too_old=yes
1613 else
1614 sdl=yes
225e21ef 1615 check_cc $sdl_cflags <<EOF && enable sdl_video_size
29f3b38a
MR
1616#include <SDL.h>
1617int main(void){
1618 const SDL_VideoInfo *vi = SDL_GetVideoInfo();
1619 int w = vi->current_w;
1620 return 0;
1621}
1622EOF
dcd479c0
MR
1623 fi
1624 fi
29f3b38a 1625 restore_flags
c3f6b472 1626fi
57bd82d4 1627
d5697779 1628texi2html -version >/dev/null 2>&1 && enable texi2html || disable texi2html
146ea952 1629
7a91333f 1630##########################################
29799f8b 1631# IPv6 check
7a91333f 1632
0c7bb0e5 1633enabled network && enabled ipv6 && check_ld <<EOF && ipv6=yes || ipv6=no
7a91333f
HZ
1634#include <sys/types.h>
1635#include <sys/socket.h>
1636#include <netinet/in.h>
1637#include <netdb.h>
1638int main( void ) {
1639 struct sockaddr_storage saddr;
1640 struct ipv6_mreq mreq6;
1641 getaddrinfo(0,0,0,0);
1642 getnameinfo(0,0,0,0,0,0,0);
12fe88b4 1643 IN6_IS_ADDR_MULTICAST((const struct in6_addr *)0);
7a91333f
HZ
1644}
1645EOF
1646
afde41b4
MR
1647enabled v4l && check_header linux/videodev.h || disable v4l
1648enabled v4l2 && check_header linux/videodev2.h || disable v4l2
47f38850 1649
f8aa696f
DB
1650# check for ioctl_meteor.h, ioctl_bt848.h and alternatives
1651if enabled bktr; then
3eac5c63
MR
1652 { check_header dev/bktr/ioctl_meteor.h &&
1653 check_header dev/bktr/ioctl_bt848.h; } ||
1654 { check_header machine/ioctl_meteor.h &&
1655 check_header machine/ioctl_bt848.h; } ||
1656 { check_header dev/video/meteor/ioctl_meteor.h &&
1657 check_header dev/video/bktr/ioctl_bt848.h; } ||
1658 check_header dev/ic/bt8xx.h ||
1659 disable bktr
f8aa696f
DB
1660fi
1661
deb29777
MR
1662enabled audio_oss &&
1663 check_header sys/soundcard.h ||
1664 check_header soundcard.h ||
1665 disable audio_oss
1666
f58f4ce1 1667# Deal with the x11 frame grabber
56a059ac 1668enabled x11grab &&
f58f4ce1
GP
1669enabled gpl &&
1670enabled x11_grab_device_demuxer &&
1671check_header X11/Xlib.h &&
1672check_header X11/extensions/XShm.h &&
1673check_func XOpenDisplay -lX11 &&
1674check_func XShmCreateImage -lX11 -lXext &&
1675add_extralibs -lX11 -lXext ||
1676disable x11_grab_device_demuxer
1677
57bd82d4
MR
1678enabled debug && add_cflags -g
1679
1680# add some useful compiler flags if supported
1681check_cflags -Wdeclaration-after-statement
dcd479c0
MR
1682check_cflags -Wall
1683check_cflags -Wno-switch
c07bd6a9
MN
1684check_cflags -Wdisabled-optimization
1685check_cflags -Wpointer-arith
1686check_cflags -Wredundant-decls
cc1fb623 1687check_cflags -Wno-pointer-sign
5af4e0cc 1688enabled extra_warnings && check_cflags -Winline
cf9d24ad 1689
57bd82d4 1690# add some linker flags
e240ee67 1691check_ldflags $LDLATEFLAGS
94a3401e 1692
57bd82d4
MR
1693# not all compilers support -Os
1694test "$optimize" = "small" && check_cflags -Os
cddf3f45 1695
57bd82d4 1696if enabled optimize; then
b2924696 1697 if test -n "`$cc -v 2>&1 | grep xlc`"; then
30a3e5d4
NP
1698 add_cflags "-O5"
1699 add_ldflags "-O5"
cf9d24ad 1700 else
30a3e5d4 1701 add_cflags "-O3"
cf9d24ad 1702 fi
cddf3f45
GM
1703fi
1704
80581e98 1705# PIC flags for shared library objects where they are needed
5af4e0cc 1706if enabled shared; then
f25fc9b1
MR
1707 # LIBOBJFLAGS may have already been set in the OS configuration
1708 if test -z "$LIBOBJFLAGS" ; then
cc6a90dd 1709 case "$arch" in
f824ba7b 1710 x86_64|ia64|alpha|sparc*|power*) LIBOBJFLAGS="\$(PIC)" ;;
813457e5 1711 esac
80581e98 1712 fi
80581e98
MN
1713fi
1714
90be59ef 1715if enabled gprof; then
30a3e5d4
NP
1716 add_cflags "-p"
1717 add_ldflags "-p"
1db54e20
DB
1718fi
1719
18451f7d 1720VHOOKCFLAGS="-fPIC $CFLAGS"
90be59ef 1721enabled needmdynamicnopic && add_cflags -mdynamic-no-pic
18451f7d 1722
4454dc1b
JD
1723# find if .align arg is power-of-two or not
1724if test $asmalign_pot = "unknown"; then
1725 asmalign_pot="no"
1726 echo 'asm (".align 3");' | check_cc && asmalign_pot="yes"
1727fi
1728
f70f03f6
MR
1729enabled_any $ENCODER_LIST && enable encoders
1730enabled_any $DECODER_LIST && enable decoders
1731enabled_any $MUXER_LIST && enable muxers
1732enabled_any $DEMUXER_LIST && enable demuxers
1733
1734enabled_any pthreads beosthreads os2threads w32threads && enable threads
1735
1736check_deps $CONFIG_LIST $HAVE_LIST $DECODER_LIST $ENCODER_LIST $PARSER_LIST \
1737 $DEMUXER_LIST $MUXER_LIST
1738
fb2ce7d9
MR
1739enabled libogg && append pkg_requires "ogg >= 1.1"
1740enabled libtheora && append pkg_requires "theora"
1741enabled libvorbis && append pkg_requires "vorbis vorbisenc"
1742enabled dc1394 && append pkg_requires "libraw1394"
1743
f36958f8
DB
1744echo "install prefix $PREFIX"
1745echo "source path $source_path"
1746echo "C compiler $cc"
1747echo "make $make"
bfd5afd8 1748echo ".align is power-of-two $asmalign_pot"
f36958f8 1749echo "ARCH $arch ($cpu)"
eb94aca9 1750if test "$BUILDSUF" != ""; then
f36958f8 1751 echo "build suffix $BUILDSUF"
eb94aca9 1752fi
f36958f8 1753echo "big-endian $bigendian"
419b8784 1754if test $arch = "x86_32" -o $arch = "x86_64"; then
f36958f8
DB
1755 echo "MMX enabled $mmx"
1756 echo "CMOV enabled $cmov"
7073e9fc 1757 echo "CMOV is fast $fast_cmov"
e41e8342 1758fi
cc6a90dd 1759if test $arch = "armv4l"; then
f36958f8 1760 echo "ARMv5TE enabled $armv5te"
edab3048 1761 echo "ARMv6 enabled $armv6"
f36958f8 1762 echo "IWMMXT enabled $iwmmxt"
eba9ae3c 1763fi
cc6a90dd 1764if test $arch = "mips"; then
f36958f8 1765 echo "MMI enabled $mmi"
e41e8342 1766fi
cc6a90dd 1767if test $arch = "powerpc"; then
f36958f8
DB
1768 echo "AltiVec enabled $altivec"
1769 echo "dcbzl available $dcbzl"
e41e8342 1770fi
f36958f8 1771echo "gprof enabled $gprof"
f36958f8
DB
1772echo "debug symbols $debug"
1773echo "strip symbols $dostrip"
1774echo "optimize $optimize"
5af4e0cc
MR
1775echo "static $static"
1776echo "shared $shared"
bfd5afd8
DB
1777echo "postprocessing support $pp"
1778echo "software scaler enabled $swscaler"
f36958f8 1779echo "video hooking $vhook"
90be59ef 1780if enabled vhook; then
f36958f8
DB
1781 echo "Imlib2 support $imlib2"
1782 echo "FreeType support $freetype2"
68892110 1783fi
bfd5afd8 1784echo "network support $network"
90be59ef 1785if enabled network; then
bfd5afd8
DB
1786 echo "IPv6 support $ipv6"
1787fi
e5f94c2b 1788echo "threading support $thread_type"
bfd5afd8 1789echo "SDL support $sdl"
90be59ef 1790if enabled sdl_too_old; then
bfd5afd8
DB
1791 echo "-> Your SDL version is too old - please upgrade to have FFplay/SDL support."
1792fi
1793echo "Sun medialib support $mlib"
1794echo "AVISynth enabled $avisynth"
7bc5f2a8 1795echo "liba52 support $liba52"
f8904fd9 1796echo "liba52 dlopened $liba52bin"
3ffab361 1797echo "libdts support $libdts"
2eed5a46
DB
1798echo "libfaac enabled $libfaac"
1799echo "libfaad enabled $libfaad"
1800echo "faadbin enabled $libfaadbin"
bfd5afd8 1801echo "libgsm enabled $libgsm"
6ebe07fb 1802echo "libmp3lame enabled $libmp3lame"
bfd5afd8
DB
1803echo "libnut enabled $libnut"
1804echo "libogg enabled $libogg"
150d2772 1805echo "libtheora enabled $libtheora"
bfd5afd8 1806echo "libvorbis enabled $libvorbis"
bfd5afd8 1807echo "x264 enabled $x264"
dc922953 1808echo "XviD enabled $xvid"
bfd5afd8 1809echo "zlib enabled $zlib"
f36958f8
DB
1810echo "AMR-NB float support $amr_nb"
1811echo "AMR-NB fixed support $amr_nb_fixed"
1812echo "AMR-WB float support $amr_wb"
1813echo "AMR-WB IF2 support $amr_if2"
37970ebf 1814if disabled gpl; then
f25fc9b1 1815 echo "License: LGPL"
b2e3c528 1816else
f25fc9b1 1817 echo "License: GPL"
b2e3c528 1818fi
de6d9b64 1819
29799f8b 1820echo "Creating config.mak and config.h..."
de6d9b64 1821
29799f8b
DB
1822echo "# Automatically generated by configure - do not modify!" > config.mak
1823echo "/* Automatically generated by configure - do not modify! */" > $TMPH
0fd12426 1824echo "#define FFMPEG_CONFIGURATION \"$FFMPEG_CONFIGURATION\"" >> $TMPH
de6d9b64 1825
2266e085
DB
1826echo "PREFIX=$PREFIX" >> config.mak
1827echo "prefix=\$(DESTDIR)\${PREFIX}" >> config.mak
9a695e98 1828echo "libdir=\$(DESTDIR)$libdir" >> config.mak
84c22efd 1829echo "shlibdir=\$(DESTDIR)$shlibdir" >> config.mak
1d67a1d4 1830echo "incdir=\$(DESTDIR)$incdir" >> config.mak
9a695e98
DB
1831echo "bindir=\$(DESTDIR)$bindir" >> config.mak
1832echo "mandir=\$(DESTDIR)$mandir" >> config.mak
4a908fbc 1833echo "MAKE=$make" >> config.mak
980fc7b8
FB
1834echo "CC=$cc" >> config.mak
1835echo "AR=$ar" >> config.mak
be7109c1 1836echo "RANLIB=$ranlib" >> config.mak
90be59ef 1837if enabled dostrip; then
f25fc9b1 1838 echo "STRIP=$strip" >> config.mak
65d1bea2 1839else
f25fc9b1 1840 echo "STRIP=echo ignoring strip" >> config.mak
65d1bea2 1841fi
75388c74 1842
a9b3f630 1843echo "OPTFLAGS=$CFLAGS" >> config.mak
408382a4 1844echo "VHOOKCFLAGS=$VHOOKCFLAGS">>config.mak
0f3cb305 1845echo "LDFLAGS=$LDFLAGS" >> config.mak
f39e56a8 1846echo "LDCONFIG=$LDCONFIG" >> config.mak
c536cb09 1847echo "FFSERVERLDFLAGS=$FFSERVERLDFLAGS" >> config.mak
e1707f52 1848echo "SHFLAGS=$SHFLAGS" >> config.mak
408382a4 1849echo "VHOOKSHFLAGS=$VHOOKSHFLAGS" >> config.mak
fbb9d104 1850echo "VHOOKLIBS=$VHOOKLIBS" >> config.mak
80581e98 1851echo "LIBOBJFLAGS=$LIBOBJFLAGS" >> config.mak
5af4e0cc 1852echo "BUILD_STATIC=$static" >> config.mak
eb94aca9 1853echo "BUILDSUF=$BUILDSUF" >> config.mak
f3ec2d46 1854echo "LIBPREF=$LIBPREF" >> config.mak
eb94aca9 1855echo "LIBSUF=\${BUILDSUF}$LIBSUF" >> config.mak
5af4e0cc 1856if enabled static; then
320d060a 1857 echo "LIB=$LIB" >> config.mak
1a44a8b6
AS
1858else # Some Make complain if this variable does not exist.
1859 echo "LIB=" >> config.mak
320d060a 1860fi
f3ec2d46 1861echo "SLIBPREF=$SLIBPREF" >> config.mak
eb94aca9
CY
1862echo "SLIBSUF=\${BUILDSUF}$SLIBSUF" >> config.mak
1863echo "EXESUF=\${BUILDSUF}$EXESUF" >> config.mak
b2828252 1864echo "TARGET_OS=$targetos" >> config.mak
4dc62701
MR
1865
1866ucarch=`toupper $arch`
1867echo "TARGET_ARCH_${ucarch}=yes" >> config.mak
1868echo "#define ARCH_${ucarch} 1" >> $TMPH
1869
1870# special cases
1871case "$arch" in
1872 x86_32|x86_64)
1873 echo "TARGET_ARCH_X86=yes" >> config.mak
1874 echo "#define ARCH_X86 1" >> $TMPH
1875 ;;
1876 powerpc)
1877 if test "$POWERPCMODE" = "64bits"; then
1878 echo "#define POWERPC_MODE_64BITS 1" >> $TMPH
4dc62701
MR
1879 fi
1880 ;;
1881 sparc64)
1882 echo "TARGET_ARCH_SPARC=yes" >> config.mak
1883 echo "#define ARCH_SPARC 1" >> $TMPH
1884 ;;
1885esac
1886
90be59ef 1887if enabled bigendian; then
0f3cb305
FB
1888 echo "WORDS_BIGENDIAN=yes" >> config.mak
1889 echo "#define WORDS_BIGENDIAN 1" >> $TMPH
91d1f1a4 1890fi
90be59ef 1891if enabled mmx; then
e82c5a8c 1892 echo "#define __CPU__ 586" >> $TMPH
de6d9b64 1893fi
44161118 1894
90be59ef 1895if enabled sdl; then
6a1a892f
FD
1896 echo "SDL_LIBS=`"${SDL_CONFIG}" --libs`" >> config.mak
1897 echo "SDL_CFLAGS=`"${SDL_CONFIG}" --cflags`" >> config.mak
a86b921c 1898fi
90be59ef 1899if enabled texi2html; then
146ea952
NB
1900 echo "BUILD_DOC=yes" >> config.mak
1901fi
5a872801 1902
790c9ca7 1903sws_version=`grep '#define LIBSWSCALE_VERSION ' "$source_path/libswscale/swscale.h" | sed 's/[^0-9\.]//g'`
6d9a2421 1904pp_version=`grep '#define LIBPOSTPROC_VERSION ' "$source_path/libpostproc/postprocess.h" | sed 's/[^0-9\.]//g'`
5a872801
LB
1905lavc_version=`grep '#define LIBAVCODEC_VERSION ' "$source_path/libavcodec/avcodec.h" | sed 's/[^0-9\.]//g'`
1906lavf_version=`grep '#define LIBAVFORMAT_VERSION ' "$source_path/libavformat/avformat.h" | sed 's/[^0-9\.]//g'`
1907lavu_version=`grep '#define LIBAVUTIL_VERSION ' "$source_path/libavutil/avutil.h" | sed 's/[^0-9\.]//g'`
1908
1909
1910
5af4e0cc 1911if enabled shared; then
0319c531 1912 echo "BUILD_SHARED=yes" >> config.mak
97006039 1913 echo "PIC=-fPIC -DPIC" >> config.mak
7e303556
DB
1914 echo "SPPMAJOR=${pp_version%%.*}" >> config.mak
1915 echo "SPPVERSION=$pp_version" >> config.mak
39503a27 1916 echo "LAVCMAJOR=${lavc_version%%.*}" >> config.mak
5a872801 1917 echo "LAVCVERSION=$lavc_version" >> config.mak
39503a27 1918 echo "LAVFMAJOR=${lavf_version%%.*}" >> config.mak
5a872801 1919 echo "LAVFVERSION=$lavf_version" >> config.mak
39503a27 1920 echo "LAVUMAJOR=${lavu_version%%.*}" >> config.mak
5a872801 1921 echo "LAVUVERSION=$lavu_version" >> config.mak
790c9ca7
LA
1922 echo "SWSMAJOR=${sws_version%%.*}" >> config.mak
1923 echo "SWSVERSION=$sws_version" >> config.mak
4bdd05e7 1924 echo "SLIBNAME=${SLIBNAME}" >> config.mak
f3b60109
DB
1925 echo "SLIBNAME_WITH_VERSION=${SLIBNAME_WITH_VERSION}" >> config.mak
1926 echo "SLIBNAME_WITH_MAJOR=${SLIBNAME_WITH_MAJOR}" >> config.mak
5cb854e1 1927 echo "SLIB_EXTRA_CMD=${SLIB_EXTRA_CMD}" >> config.mak
8fbec4f4 1928 echo "SLIB_INSTALL_EXTRA_CMD=${SLIB_INSTALL_EXTRA_CMD}" >> config.mak
0319c531 1929fi
d7e27559 1930echo "LIB_INSTALL_EXTRA_CMD=${LIB_INSTALL_EXTRA_CMD}" >> config.mak
ef0bc4c9 1931echo "EXTRALIBS=$extralibs" >> config.mak
d2845d68 1932
44161118
MR
1933print_config HAVE_ $TMPH config.mak $HAVE_LIST
1934print_config CONFIG_ $TMPH config.mak $CONFIG_LIST
1ac9331a 1935print_config TARGET_ $TMPH config.mak $TARGET_LIST
8ac17293 1936
b2828252 1937if test "$targetos" = "Darwin"; then
90cee0c3 1938 echo "#define CONFIG_DARWIN 1" >> $TMPH
90cee0c3
MN
1939fi
1940
c13e1abd
FH
1941echo "#define restrict $_restrict" >> $TMPH
1942
bb801c97
MN
1943if test "$optimize" = "small"; then
1944 echo "#define always_inline" >> $TMPH
e5f28e8f 1945 echo "#define CONFIG_SMALL 1" >> $TMPH
bb801c97
MN
1946fi
1947
997baf01
MR
1948echo "SRC_PATH=\"$source_path\"" >> config.mak
1949echo "SRC_PATH_BARE=$source_path" >> config.mak
1950echo "BUILD_ROOT=\"$PWD\"" >> config.mak
0f3cb305 1951
90be59ef 1952if enabled amr_if2; then
2a515c08
TM
1953 echo "AMR_CFLAGS=-DIF2=1" >> config.mak
1954fi
1955
8156056e 1956# Apparently it's not possible to portably echo a backslash.
90be59ef 1957if enabled asmalign_pot; then
8156056e 1958 printf '#define ASMALIGN(ZEROBITS) ".align " #ZEROBITS "\\n\\t"\n' >> $TMPH
4454dc1b 1959else
8156056e 1960 printf '#define ASMALIGN(ZEROBITS) ".align 1<<" #ZEROBITS "\\n\\t"\n' >> $TMPH
4454dc1b
JD
1961fi
1962
bc634f6f 1963
55006fc0 1964for codec in $DECODER_LIST $ENCODER_LIST $PARSER_LIST $DEMUXER_LIST $MUXER_LIST; do
44161118 1965 ucname="`toupper $codec`"
a8d04fba
MR
1966 config_name="CONFIG_$ucname"
1967 enabled_name="ENABLE_$ucname"
1968 if enabled $codec; then
1969 echo "#define $config_name 1" >> $TMPH
1970 echo "#define $enabled_name 1" >> $TMPH
1971 echo "$config_name=yes" >> config.mak
1972 else
1973 echo "#define $enabled_name 0" >> $TMPH
1974 fi
009cf97d
MN
1975done
1976
9cb2cf10 1977# Do not overwrite config.h if unchanged to avoid superfluous rebuilds.
c683a5d1 1978if ! cmp -s $TMPH config.h; then
9cb2cf10
DB
1979 mv -f $TMPH config.h
1980else
1981 echo "config.h is unchanged"
1982fi
3d204385 1983
f3ec2d46 1984rm -f $TMPO $TMPC $TMPE $TMPS $TMPH
def4272a 1985
165af439 1986# build tree in object directory if source path is different from current one
90be59ef 1987if enabled source_path_used; then
165af439
MR
1988 DIRS="\
1989 doc \
1990 libavformat \
1991 libavcodec \
1992 libavcodec/alpha \
1993 libavcodec/armv4l \
1994 libavcodec/bfin \
1995 libavcodec/i386 \
1996 libavcodec/sparc \
1997 libavcodec/mlib \
1998 libavcodec/ppc \
3918dc4f
DB
1999 libavcodec/amr \
2000 libavcodec/amr_float \
2001 libavcodec/amrwb_float \
165af439
MR
2002 libpostproc \
2003 libavutil \
2004 libswscale \
2005 tests \
2006 vhook \
2007 "
2008 FILES="\
2009 Makefile \
2010 common.mak \
2011 libavformat/Makefile \
2012 libavcodec/Makefile \
2013 libpostproc/Makefile \
2014 libavutil/Makefile \
2015 libswscale/Makefile \
2016 tests/Makefile \
2017 vhook/Makefile \
2018 doc/Makefile \
2019 doc/texi2pod.pl \
2020 "
2021 for dir in $DIRS ; do
2022 mkdir -p $dir
2023 done
2024 for f in $FILES ; do
2025 ln -sf "$source_path/$f" $f
2026 done
2027fi
def4272a 2028
def4272a 2029
d0674868 2030# build pkg-config files
77aee36c 2031# FIXME: libdir and includedir are hardcoded and may differ from the real path.
def4272a 2032
d0674868
DB
2033pkgconfig_generate(){
2034name=$1
2035comment=$2
2036version=$3
2037libs=$4
2038requires=$5
2039include=$6
2040cat <<EOF >$name.pc
2266e085 2041prefix=$PREFIX
a94e666c 2042exec_prefix=\${prefix}
def4272a 2043libdir=\${exec_prefix}/lib
a94e666c 2044includedir=\${prefix}/include
def4272a 2045
d0674868
DB
2046Name: $name
2047Description: $comment
2048Version: $version
2049Requires: $requires
def4272a 2050Conflicts:
d0674868
DB
2051Libs: -L\${libdir} $libs
2052Cflags: -I\${includedir} -I\${includedir}/$include
def4272a 2053EOF
d0674868 2054}
def4272a 2055
d0674868
DB
2056pkgconfig_generate_uninstalled(){
2057name=$1
9c476fd6 2058shortname=${name#lib}
d0674868
DB
2059comment=$2
2060version=$3
2061libs=$4
2062requires=$5
2063cat <<EOF >$name-uninstalled.pc
def4272a
AJ
2064prefix=
2065exec_prefix=
d0674868
DB
2066libdir=\${pcfiledir}/$name
2067includedir=\${pcfiledir}/$name
def4272a 2068
d0674868
DB
2069Name: $name
2070Description: $comment
2071Version: $version
2072Requires: $requires
def4272a 2073Conflicts:
d0674868 2074Libs: \${libdir}/${LIBPREF}${shortname}${LIBSUF} $libs
def4272a
AJ
2075Cflags: -I\${includedir}
2076EOF
d0674868 2077}
def4272a 2078
9d824ad1 2079pkgconfig_generate libavutil "FFmpeg utility library" "$lavu_version" -lavutil "" ffmpeg
d0674868 2080pkgconfig_generate_uninstalled libavutil "FFmpeg utility library" "$lavu_version"
def4272a 2081
d0674868
DB
2082pkgconfig_generate libavcodec "FFmpeg codec library" "$lavc_version" "-lavcodec $extralibs" "$pkg_requires libavutil = $lavu_version" ffmpeg
2083pkgconfig_generate_uninstalled libavcodec "FFmpeg codec library" "$lavc_version" "$extralibs" "$pkg_requires libavutil = $lavu_version"
def4272a 2084
d0674868
DB
2085pkgconfig_generate libavformat "FFmpeg container format library" "$lavf_version" "-lavformat $extralibs" "$pkg_requires libavcodec = $lavc_version" ffmpeg
2086pkgconfig_generate_uninstalled libavformat "FFmpeg container format library" "$lavf_version" "$extralibs" "$pkg_requires libavcodec = $lavc_version"
def4272a 2087
90be59ef 2088if enabled pp; then
2e3bcd38
DB
2089 pkgconfig_generate libpostproc "FFmpeg post processing library" "$pp_version" -lpostproc "" postproc
2090 pkgconfig_generate_uninstalled libpostproc "FFmpeg post processing library" "$pp_version"
2091fi
790c9ca7 2092
c839db53 2093if enabled swscaler; then
20c516c6
DM
2094 pkgconfig_generate libswscale "FFmpeg image rescaling library" "$sws_version" "-lswscale" "libavutil = $lavu_version" swscale
2095 pkgconfig_generate_uninstalled libswscale "FFmpeg image rescaling library" "$sws_version" "" "libavutil = $lavu_version"
6c0d0413 2096else
d0674868
DB
2097 pkgconfig_generate libswscale "FFmpeg image rescaling library" "$sws_version" "" "$pkg_requires libavcodec = $lavc_version" swscale
2098 pkgconfig_generate_uninstalled libswscale "FFmpeg image rescaling library" "$sws_version" "" "$pkg_requires libavcodec = $lavc_version"
c505dd31
MR
2099 apply libswscale.pc sed s/^Libs:.*$/Libs:/
2100 apply libswscale-uninstalled.pc sed s/^Libs:.*$/Libs:/
6c0d0413 2101fi