#!/bin/sh case $1 in "") cc=cc;; *) cc=$1;; esac export cc cd auto-aux rm -f s.h m.h Makefile.h touch s.h m.h Makefile.h # Check the sizes of data types echo "Checking the sizes of integers and pointers..." set `sh ./runtest sizes.c` case "$1,$2,$3" in 4,4,4) echo "OK, this is a regular 32 bit architecture.";; 4,8,8) echo "Wow! A 64 bit architecture!" echo "#define SIXTYFOUR" >> m.h;; 8,*,*) echo "Wow! A 64 bit architecture!" echo "Unfortunately, Caml Special Light does not handle the case" echo "sizeof(int) = 8." echo "Caml Special Light won't run on this architecture." exit 2;; *,4,8) echo "Wow! A 64 bit architecture!" echo "Unfortunately, Caml Special Light cannot work in the case" echo "sizeof(long) != sizeof(long *)." echo "Caml Special Light won't run on this architecture." exit 2;; ?,?,?) echo "This architecture seems to be neither 32 bits nor 64 bits." echo "Caml Special Light won't run on this architecture." exit 2;; *) echo "Unable to compile the test program." echo "Make sure the C compiler is properly installed." exit 2;; esac # Determine endianness sh ./runtest endian.c case $? in 0) echo "This is a big-endian architecture." echo "#define BIG_ENDIAN" >> m.h;; 1) echo "This is a little-endian architecture." echo "#undef BIG_ENDIAN" >> m.h;; 2) echo "This architecture seems to be neither big endian nor little endian." echo "Caml Special Light won't run on this architecture." exit 2;; *) echo "Something went wrong during endianness determination." echo "You'll have to figure out endianness yourself" echo "(option BIG_ENDIAN in m.h).";; esac # Determine alignment constraints sh ./runtest dblalign.c case $? in 0) echo "Doubles can be word-aligned.";; 1) echo "Doubles must be doubleword-aligned." echo "#define ALIGN_DOUBLE" >> m.h;; *) echo "Something went wrong during alignment determination for doubles." echo "I'm going to assume this architecture has alignment constraints over doubles." echo "That's a safe bet: Caml Special Light will work even if" echo "this architecture has actually no alignment constraints." echo "#define ALIGN_DOUBLE" >> m.h;; esac # Find a good byte move function if sh ./runtest -Dcopy=memmove -Dreverse bytecopy.c; then echo "Function \"memmove\" is provided and handles overlapping moves correctly." echo "#define HAS_MEMMOVE" >> s.h fi if sh ./runtest -Dcopy=bcopy bytecopy.c; then echo "Function \"bcopy\" is provided and handles overlapping moves correctly." echo "#define HAS_BCOPY" >> s.h fi # Check for _longjmp and _setjmp sh ./runtest setjmp.c case $? in 0) echo "_setjmp and _longjmp appear to work. Good!" echo "#define HAS__SETJMP" >> s.h;; *) echo "No _setjmp, _longjmp. We'll use setjmp and longjmp instead." esac # Check the semantics of signal handlers if sh ./runtest signals.c; then echo "Signals have the BSD semantics." echo "#define BSD_SIGNALS" >> s.h else echo "Signals have the System V semantics." fi # For the terminfo module if sh hasgot -lcurses -ltermcap tgetent tgetstr tgetnum tputs; then echo "termcap functions found." echo "#define HAS_TERMCAP" >> s.h echo "TERMCAPLIBS=-lcurses -ltermcap" >> Makefile.h fi # For the Unix library if sh hasgot socket socketpair bind listen accept connect; then echo "You have BSD sockets." echo "#define HAS_SOCKETS" >> s.h fi if test -f /usr/include/unistd.h; then echo "unistd.h found." echo "#define HAS_UNISTD" >> s.h fi if test -f /usr/include/dirent.h; then echo "dirent.h found." echo "#define HAS_DIRENT" >> s.h fi if sh hasgot lockf; then echo "lockf() found." echo "#define HAS_LOCKF" >> s.h fi if sh hasgot mkfifo; then echo "mkfifo() found." echo "#define HAS_MKFIFO" >> s.h fi if sh hasgot getcwd; then echo "getcwd() found." echo "#define HAS_GETCWD" >> s.h fi if sh hasgot getwd; then echo "getwd() found." echo "#define HAS_GETWD" >> s.h fi if sh hasgot getpriority setpriority; then echo "getpriority() found." echo "#define HAS_GETPRIORITY" >> s.h fi if test -f /usr/include/utime.h && sh hasgot utime; then echo "utime() found." echo "#define HAS_UTIME" >> s.h fi if sh hasgot utimes; then echo "utimes() found." echo "#define HAS_UTIMES" >> s.h fi if sh hasgot dup2; then echo "dup2() found." echo "#define HAS_DUP2" >> s.h fi if sh hasgot fchmod fchown; then echo "fchmod() found." echo "#define HAS_FCHMOD" >> s.h fi if sh hasgot truncate ftruncate; then echo "truncate() found." echo "#define HAS_TRUNCATE" >> s.h fi if sh hasgot select; then echo "select() found." echo "#define HAS_SELECT" >> s.h fi if sh hasgot symlink readlink lstat; then echo "symlink() found." echo "#define HAS_SYMLINK" >> s.h fi if sh hasgot wait3; then echo "wait3() found." echo "#define HAS_WAIT3" >> s.h fi if sh hasgot waitpid; then echo "waitpid() found." echo "#define HAS_WAITPID" >> s.h fi if test -f /usr/include/sys/param.h && sh ./runtest getgroups.c; then echo "getgroups() found." echo "#define HAS_GETGROUPS" >> s.h fi if test -f /usr/include/termios.h && sh hasgot tcgetattr tcsetattr tcsendbreak tcflush tcflow; then echo "POSIX termios found." echo "#define HAS_TERMIOS" >> s.h fi # Async I/O under OSF1 3.x are so buggy that the test program hangs... testasyncio=true if test -f /usr/bin/uname; then case "`uname -s -r`" in "OSF1 V3."*) testasyncio=false;; esac fi if $testasyncio && sh ./runtest async_io.c; then echo "Asynchronous I/O are supported." echo "#define HAS_ASYNC_IO" >> s.h fi if sh hasgot setitimer; then echo "setitimer() found." echo "#define HAS_SETITIMER" >> s.h fi if sh hasgot gethostname; then echo "gethostname() found." echo "#define HAS_GETHOSTNAME" >> s.h fi if test -f /usr/include/sys/utsname.h && sh hasgot uname; then echo "uname() found." echo "#define HAS_UNAME" >> s.h fi rm -f tst hasgot.c rm -f ../m.h ../s.h ../Makefile.h mv m.h s.h Makefile.h ..