altivec build tidyup patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
[ffmpeg.git] / configure
1 #!/bin/sh
2 #
3 # ffmpeg configure script (c) 2000, 2001, 2002 Fabrice Bellard
4 #
5 # set temporary file name
6 if test ! -z "$TMPDIR" ; then
7     TMPDIR1="${TMPDIR}"
8 elif test ! -z "$TEMPDIR" ; then
9     TMPDIR1="${TEMPDIR}"
10 else
11     TMPDIR1="/tmp"
12 fi
13
14 TMPC="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.c"
15 TMPO="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.o"
16 TMPS="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.S"
17 TMPH="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.h"
18
19 # default parameters
20 prefix="/usr/local"
21 cross_prefix=""
22 cc="gcc"
23 ar="ar"
24 make="make"
25 strip="strip"
26 cpu=`uname -m`
27 mmx="default"
28 altivec="default"
29 case "$cpu" in
30   i386|i486|i586|i686|i86pc|BePC)
31     cpu="x86"
32   ;;
33   armv4l)
34     cpu="armv4l"
35   ;;
36   alpha)
37     cpu="alpha"
38   ;;
39   "Power Macintosh"|ppc)
40     cpu="powerpc"
41   ;;
42   *)
43     cpu="unknown"
44   ;;
45 esac
46 gprof="no"
47 v4l="yes"
48 audio_oss="yes"
49 network="yes"
50 zlib="yes"
51 mp3lame="no"
52 vorbis="no"
53 a52="yes"
54 a52bin="no"
55 win32="no"
56 cygwin="no"
57 lshared="no"
58 extralibs="-lm"
59 simpleidct="yes"
60 bigendian="no"
61 vhook="no"
62 mpegaudio_hp="yes"
63 SHFLAGS=-shared
64
65 # OS specific
66 targetos=`uname -s`
67 case $targetos in
68 BeOS)
69 prefix="/boot/home/config"
70 # helps building libavcodec
71 CFLAGS="-O3 -DPIC -fomit-frame-pointer"
72 SHFLAGS=-nostart
73 # disable linux things
74 audio_oss="no"
75 v4l="no"
76 # no need for libm, but the inet stuff
77 # Check for BONE
78 if (echo $BEINCLUDES|grep 'headers/be/bone' >/dev/null); then
79 extralibs="-lbind -lsocket"
80 else
81 echo "Not sure building for net_server will succeed... good luck."
82 extralibs="-lsocket"
83 fi ;;
84 BSD/OS)
85 v4l="no"
86 audio_oss="yes"
87 extralibs="-lpoll -lgnugetopt -lm"
88 make="gmake"
89 ;;
90 Darwin)
91 cc="cc"
92 v4l="no"
93 audio_oss="no"
94 CFLAGS="-no-cpp-precomp -pipe -O3 -fomit-frame-pointer"
95 SHFLAGS="-dynamiclib"
96 extralibs=""
97 darwin="yes"
98 ;;
99 CYGWIN*)
100 v4l="no"
101 audio_oss="yes"
102 extralibs=""
103 cygwin="yes"
104 test -f /usr/include/inttypes.h || \
105 test -f /usr/local/include/inttypes.h || \
106 echo "Missing inttypes.h, please copy cygwin_inttypes.h to" \
107      "/usr/include/inttypes.h !!!"
108 ;;
109 *) ;;
110 esac
111
112 # find source path
113 # XXX: we assume an absolute path is given when launching configure, 
114 # except in './configure' case.
115 source_path=${0%configure}
116 source_path=${source_path%/}
117 source_path_used="yes"
118 if test -z "$source_path" -o "$source_path" = "." ; then
119     source_path=`pwd`
120     source_path_used="no"
121 fi
122
123 cat > $TMPC << EOF
124 #include <dlfcn.h>
125 int main( void ) { return (int) dlopen("foo", 0); }
126 EOF
127
128 if $cc -o $TMPO $TMPC -ldl 2> /dev/null  ; then
129 : vhook=yes
130 fi
131
132 cat > $TMPC << EOF
133 #include <X11/Xlib.h>
134 #include <Imlib2.h>
135 int main( void ) { return (int) imlib_load_font("foo"); }
136 EOF
137
138 imlib2=no
139 if $cc -o $TMPO $TMPC -lImlib2 2> /dev/null  ; then
140 imlib2=yes
141 fi
142
143 for opt do
144   case "$opt" in
145   --prefix=*) prefix=`echo $opt | cut -d '=' -f 2`
146   ;;
147   --source-path=*) source_path=`echo $opt | cut -d '=' -f 2`
148   ;;
149   --cross-prefix=*) cross_prefix=`echo $opt | cut -d '=' -f 2`
150   ;;
151   --cc=*) cc=`echo $opt | cut -d '=' -f 2`
152   ;;
153   --make=*) make=`echo $opt | cut -d '=' -f 2`
154   ;;
155   --extra-cflags=*) CFLAGS="${opt#--extra-cflags=}"
156   ;;
157   --extra-ldflags=*) LDFLAGS=${opt#--extra-ldflags=}
158   ;;
159   --extra-libs=*) extralibs=${opt#--extra-libs=}
160   ;;
161   --cpu=*) cpu=`echo $opt | cut -d '=' -f 2`
162   ;;
163   --disable-mmx) mmx="no"
164   ;;
165   --disable-altivec) altivec="no"
166   ;;
167   --enable-gprof) gprof="yes"
168   ;;
169   --disable-v4l) v4l="no"
170   ;;
171   --disable-audio-oss) audio_oss="no"
172   ;;
173   --disable-network) network="no"
174   ;;
175   --disable-zlib) zlib="no"
176   ;;
177   --disable-a52) a52="no"
178   ;;
179   --enable-a52bin) a52bin="yes" ; extralibs="-ldl $extralibs"
180   ;;
181   --enable-mp3lame) mp3lame="yes"
182   ;;
183   --enable-vorbis) vorbis="yes"
184   ;;
185   --disable-vhook) vhook="no"
186   ;;
187   --disable-simple_idct) simpleidct="no"
188   ;;
189   --enable-win32) win32="yes"
190   ;;
191   --enable-shared) lshared="yes"
192   ;;
193   --disable-mpegaudio-hp) mpegaudio_hp="no"
194   ;;
195   esac
196 done
197
198 # compute mmx state
199 if test $mmx = "default"; then
200     if test $cpu = "x86"; then
201         mmx="yes"
202     else
203         mmx="no"
204     fi
205 fi
206
207 # Can only do AltiVec on PowerPC
208 if test $altivec = "default"; then
209     if test $cpu = "powerpc"; then
210         altivec="yes"
211     else
212         altivec="no"
213     fi
214 fi
215
216 # See does our compiler support Motorola AltiVec C API
217 if test $altivec = "yes"; then
218 cat > $TMPC << EOF
219 int main(void) {
220     vector signed int v1, v2, v3;
221     v1 = vec_add(v2,v3);
222     return 0;
223 }
224 EOF
225 $cc -o $TMPO $TMPC -faltivec 2> /dev/null || altivec="no"
226 fi
227
228 # Checking for CFLAGS
229 if test -z "$CFLAGS"; then
230     CFLAGS="-O3"
231 fi
232
233 if test "$win32" = "yes" ; then
234     cross_prefix="i386-mingw32msvc-"
235     v4l="no"
236     audio_oss="no"
237     network="no"
238 fi
239
240 cc="${cross_prefix}${cc}"
241 ar="${cross_prefix}${ar}"
242 strip="${cross_prefix}${strip}"
243
244 # ---
245 # big/little endian test
246 cat > $TMPC << EOF
247 #include <inttypes.h>
248 int main(int argc, char ** argv){
249         volatile uint32_t i=0x01234567;
250         return (*((uint8_t*)(&i))) == 0x67;
251 }
252 EOF
253
254 if $cc -o $TMPO $TMPC 2>/dev/null ; then
255 $TMPO && bigendian="yes"
256 else
257 echo big/little test failed
258 fi
259
260 # ---
261 # check availability of some header files
262
263 cat > $TMPC << EOF
264 #include <malloc.h>
265 int main( void ) { return 0; }
266 EOF
267
268 _memalign=no
269 _malloc_h=no
270 if $cc -o $TMPO $TMPC 2> /dev/null ; then
271 _malloc_h=yes
272 _memalign=yes
273 # check for memalign - atmos
274 cat > $TMPC << EOF
275 #include <malloc.h>
276 int main ( void ) {
277 char *string = NULL;
278 string = memalign(64, sizeof(char));
279 return 0;
280 }
281 EOF
282 $cc -o $TMPO $TMPC 2> /dev/null || _memalign=no
283 fi
284
285 cat > $TMPC << EOF
286 #define _GNU_SOURCE
287 #include <time.h>
288 int main( void ) { return *strptime("", "", 0); }
289 EOF
290
291 strptime=no
292 if $cc -o $TMPO $TMPC 2> /dev/null ; then
293   strptime=yes
294 fi
295
296 if test "$zlib" = "yes"; then
297 # check for zlib - mmu_man
298 cat > $TMPC << EOF
299 #include <zlib.h>
300 int main ( void ) {
301 if (zlibVersion() != ZLIB_VERSION)
302    puts("zlib version differs !!!");
303    return 1;
304 return 0;
305 }
306 EOF
307 $cc -o $TMPO $TMPC -lz 2> /dev/null || zlib="no"
308 # $TMPO 2> /dev/null > /dev/null || zlib="no"
309 # XXX: more tests needed - runtime test
310 fi
311 if test "$zlib" = "yes"; then
312 extralibs="$extralibs -lz"
313 fi
314
315 _restrict=
316 for restrict_keyword in restrict __restrict__ __restrict; do
317   echo "void foo(char * $restrict_keyword p);" > $TMPC
318   if $cc -c -o $TMPO $TMPC 2> /dev/null; then
319     _restrict=$restrict_keyword
320     break;
321   fi
322 done
323
324 if test x"$1" = x"-h" -o x"$1" = x"--help" ; then
325 cat << EOF
326
327 Usage: configure [options]
328 Options: [defaults in brackets after descriptions]
329
330 EOF
331 echo "Standard options:"
332 echo "  --help                   print this message"
333 echo "  --prefix=PREFIX          install in PREFIX [$prefix]"
334 echo "  --enable-mp3lame         enable mp3 encoding via libmp3lame [default=no]"
335 echo "  --enable-vorbis          enable vorbis support via libvorbisenc [default=no]"
336 echo "  --enable-win32           enable win32 cross compile"
337 echo "  --disable-a52            disable GPL'ed A52 support [default=no]"
338 echo "  --enable-a52bin          open liba52.so.0 at runtime [default=no]"
339 echo "  --enable-shared          build shared libraries [default=no]"
340 echo ""
341 echo "Advanced options (experts only):"
342 echo "  --source-path=PATH       path of source code [$source_path]"
343 echo "  --cross-prefix=PREFIX    use PREFIX for compile tools [$cross_prefix]"
344 echo "  --cc=CC                  use C compiler CC [$cc]"
345 echo "  --make=MAKE              use specified make [$make]"
346 echo "  --extra-cflags=ECFLAGS   add ECFLAGS to CFLAGS [$CFLAGS]"
347 echo "  --extra-ldflags=ELDFLAGS add ELDFLAGS to LDFLAGS [$LDFLAGS]"
348 echo "  --extra-libs=ELIBS       add ELIBS [$ELIBS]"
349 echo "  --cpu=CPU                force cpu to CPU  [$cpu]"
350 echo "  --disable-mmx            disable mmx usage"
351 echo "  --disable-altivec        disable AltiVec usage"
352 echo "  --disable-audio-oss      disable OSS audio support [default=no]"
353 echo "  --disable-v4l            disable video4linux grabbing [default=no]"
354 echo "  --disable-network        disable network support [default=no]"
355 echo "  --disable-zlib           disable zlib [default=no]"
356 echo "  --disable-simple_idct    disable simple IDCT routines [default=no]"
357 # echo "  --disable-vhook          disable video hooking support"
358 echo "  --enable-gprof           enable profiling with gprof [$gprof]"
359 echo "  --disable-mpegaudio-hp   faster (but less accurate)"
360 echo "                           mpegaudio decoding [default=no]"
361 echo ""
362 echo "NOTE: The object files are build at the place where configure is launched"
363 exit 1
364 fi
365
366 echo "Install prefix   $prefix"
367 echo "Source path      $source_path"
368 echo "C compiler       $cc"
369 echo "make             $make"
370 echo "CPU              $cpu"
371 echo "Big Endian       $bigendian"
372 echo "MMX enabled      $mmx"
373 echo "AltiVec enabled  $altivec"
374 echo "gprof enabled    $gprof"
375 echo "zlib enabled     $zlib"
376 echo "mp3lame enabled  $mp3lame"
377 echo "vorbis enabled   $vorbis"
378 echo "a52 support      $a52"
379 echo "a52 dlopened     $a52bin"
380 # echo "Video hooking    $vhook"
381
382 if test "$vhook" = "yes" ; then
383 : echo "Imlib2 support   $imlib2"
384 fi
385
386 echo "Creating config.mak and config.h"
387
388 echo "# Automatically generated by configure - do not modify" > config.mak
389 echo "/* Automatically generated by configure - do not modify */" > $TMPH
390
391 echo "prefix=$prefix" >> config.mak
392 echo "MAKE=$make" >> config.mak
393 echo "CC=$cc" >> config.mak
394 echo "AR=$ar" >> config.mak
395 echo "STRIP=$strip" >> config.mak
396 echo "OPTFLAGS=$CFLAGS" >> config.mak
397 echo "LDFLAGS=$LDFLAGS" >> config.mak
398 echo "SHFLAGS=$SHFLAGS" >> config.mak
399 if test "$cpu" = "x86" ; then
400   echo "TARGET_ARCH_X86=yes" >> config.mak
401   echo "#define ARCH_X86 1" >> $TMPH
402 elif test "$cpu" = "armv4l" ; then
403   echo "TARGET_ARCH_ARMV4L=yes" >> config.mak
404   echo "#define ARCH_ARMV4L 1" >> $TMPH
405 elif test "$cpu" = "alpha" ; then
406   echo "TARGET_ARCH_ALPHA=yes" >> config.mak
407   echo "#define ARCH_ALPHA 1" >> $TMPH
408 elif test "$cpu" = "powerpc" ; then
409   echo "TARGET_ARCH_POWERPC=yes" >> config.mak
410   echo "#define ARCH_POWERPC 1" >> $TMPH
411 fi
412 if test "$bigendian" = "yes" ; then
413   echo "WORDS_BIGENDIAN=yes" >> config.mak
414   echo "#define WORDS_BIGENDIAN 1" >> $TMPH
415 fi
416 if test "$mmx" = "yes" ; then
417   echo "TARGET_MMX=yes" >> config.mak
418   echo "#define HAVE_MMX 1" >> $TMPH
419 fi
420 if test "$altivec" = "yes" ; then
421   echo "TARGET_ALTIVEC=yes" >> config.mak
422   echo "#define HAVE_ALTIVEC 1" >> $TMPH
423 fi
424 if test "$gprof" = "yes" ; then
425   echo "TARGET_GPROF=yes" >> config.mak
426   echo "#define HAVE_GPROF 1" >> $TMPH
427 fi
428 if test "$strptime" = "yes" ; then
429   echo "#define HAVE_STRPTIME 1" >> $TMPH
430 else
431   echo "BUILD_STRPTIME=yes" >> config.mak
432 fi
433 if test "$imlib2" = "yes" ; then
434   echo "HAVE_IMLIB2=yes" >> config.mak
435 fi
436 if test "$vhook" = "yes" ; then
437   echo "BUILD_VHOOK=yes" >> config.mak
438   echo "#define HAVE_VHOOK 1" >> $TMPH
439   extralibs="$extralibs -ldl"
440 fi
441 if test "$lshared" = "yes" ; then
442   echo "BUILD_SHARED=yes" >> config.mak
443   echo "PIC=-fPIC" >> config.mak
444 fi
445 echo "EXTRALIBS=$extralibs" >> config.mak
446 echo -n "VERSION=" >>config.mak
447 head $source_path/VERSION >>config.mak
448 echo "" >>config.mak
449 # if you do not want to use encoders, disable that.
450 echo "#define CONFIG_ENCODERS 1" >> $TMPH
451 echo "CONFIG_ENCODERS=yes" >> config.mak
452
453 # if you do not want to use decoders, disable that.
454 echo "#define CONFIG_DECODERS 1" >> $TMPH
455 echo "CONFIG_DECODERS=yes" >> config.mak
456
457 # AC3
458 if test "$a52" = "yes" ; then
459   echo "#define CONFIG_AC3 1" >> $TMPH
460   echo "CONFIG_AC3=yes" >> config.mak
461
462   if test "$a52bin" = "yes" ; then
463     echo "#define CONFIG_A52BIN 1" >> $TMPH
464     echo "CONFIG_A52BIN=yes" >> config.mak
465   fi
466 fi
467
468 # mpeg audio high precision mode
469 if test "$mpegaudio_hp" = "yes" ; then
470   echo "#define CONFIG_MPEGAUDIO_HP 1" >> $TMPH
471 fi
472
473 if test "$v4l" = "yes" ; then
474   echo "#define CONFIG_VIDEO4LINUX 1" >> $TMPH
475   echo "CONFIG_VIDEO4LINUX=yes" >> config.mak
476 fi
477
478 if test "$audio_oss" = "yes" ; then
479   echo "#define CONFIG_AUDIO_OSS 1" >> $TMPH
480   echo "CONFIG_AUDIO_OSS=yes" >> config.mak
481 fi
482
483 if test "$network" = "yes" ; then
484   echo "#define CONFIG_NETWORK 1" >> $TMPH
485   echo "CONFIG_NETWORK=yes" >> config.mak
486 fi
487
488 if test "$zlib" = "yes" ; then
489   echo "#define CONFIG_ZLIB 1" >> $TMPH
490   echo "CONFIG_ZLIB=yes" >> config.mak
491 fi
492
493 if test "$mp3lame" = "yes" ; then
494   echo "#define CONFIG_MP3LAME 1" >> $TMPH
495   echo "CONFIG_MP3LAME=yes" >> config.mak
496 fi
497
498 if test "$vorbis" = "yes" ; then
499   echo "#define CONFIG_VORBIS 1" >> $TMPH
500   echo "CONFIG_VORBIS=yes" >> config.mak
501 fi
502
503 if test "$win32" = "yes" ; then
504   echo "#define CONFIG_WIN32 1" >> $TMPH
505   echo "CONFIG_WIN32=yes" >> config.mak
506 fi
507
508 if test "$cygwin" = "yes" ; then
509   # setup correct exesuffix
510   echo "CONFIG_WIN32=yes" >> config.mak
511 fi
512
513 if test "$darwin" = "yes"; then
514   echo "#define CONFIG_DARWIN 1"  >> $TMPH
515   echo "CONFIG_DARWIN=yes" >> config.mak
516 fi
517
518 if test "$_malloc_h" = "yes" ; then
519   echo "#define HAVE_MALLOC_H 1" >> $TMPH
520 else
521   echo "#undef  HAVE_MALLOC_H" >> $TMPH
522 fi
523
524 if test "$_memalign" = "yes" ; then
525   echo "#define HAVE_MEMALIGN 1" >> $TMPH
526 else
527   echo "#undef  HAVE_MEMALIGN" >> $TMPH
528 fi
529
530 if test "$simpleidct" = "yes" ; then
531   echo "#define SIMPLE_IDCT 1" >> $TMPH
532 fi
533
534 echo "#define restrict $_restrict" >> $TMPH
535
536 # build tree in object directory if source path is different from current one
537 if test "$source_path_used" = "yes" ; then
538     DIRS="libav libavcodec libavcodec/alpha libavcodec/armv4l libavcodec/i386 \
539           libavcodec/ppc libavcodec/liba52 libavcodec/mlib tests"
540     FILES="Makefile libav/Makefile libavcodec/Makefile tests/Makefile"
541     for dir in $DIRS ; do
542             mkdir -p $dir
543     done
544     for f in $FILES ; do
545         ln -sf $source_path/$f $f
546     done
547 fi
548 echo "SRC_PATH=$source_path" >> config.mak
549
550 diff $TMPH config.h >/dev/null 2>&1
551 if test $? -ne 0 ; then
552         mv -f $TMPH config.h
553 else
554         echo "config.h is unchanged"
555 fi
556
557 rm -f $TMPO $TMPC $TMPS $TMPH