281 lines · 7.6 KB · Text
RawDownload
#!/bin/sh case $1 in  "") cc=cc;;   *) cc=$1;;esacexport cc cd auto-auxrm -f s.h m.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,8,8) echo "Wow! A 64 bit architecture!"         echo "Unfortunately, Caml Light has never been tested in the case"         echo "sizeof(int) = 8."         echo "Caml Light won't run on this architecture."         exit 2;;  4,4,8) echo "Wow! A 64 bit architecture!"         echo "Unfortunately, Caml Light cannot work in the case"         echo "sizeof(long) != sizeof(long *)."         echo "Caml Light won't run on this architecture."         exit 2;;      *) echo "This architecture seems to be neither 32 bits nor 64 bits."         echo "Caml Light won't run on this architecture."         exit 2;;esac # Are chars signed? sh runtest schar.ccase $? in  0) echo "The char type is signed. Good!";;  1) echo "The char type is not signed. Let's see if 'signed char' works."     sh runtest schar2.c     case $? in      0) echo "Yes, it works. Good!"         echo "#define SIGNED_CHAR_WORKS" >> s.h;;      *) echo "No, it does not work. Let's try some compiler options."         goodopt=""         for option in -signed -fsigned-char; do           sh runtest $option schar.c           case $? in             0) goodopt=$option; break;;           esac         done         case "$goodopt" in           "") echo "Sorry, I can't find the right option."               echo "Please figure it out yourself, and"               echo "add it to OTHEROPTS in src/runtime/Makefile.";;            *) echo "Yippie! Option $goodopt works. Good!"               echo "Add \"$goodopt\" to OTHEROPTS in src/runtime/Makefile.";;         esac;;     esac;;esac # Determine endianness sh runtest endian.ccase $? in  0) echo "This is a big-endian architecture."     echo "#define MOSML_BIG_ENDIAN" >> m.h;;  1) echo "This is a little-endian architecture."     echo "#undef MOSML_BIG_ENDIAN" >> m.h;;  2) echo "This architecture seems to be neither big endian nor little endian."     echo "Caml 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 MOSML_BIG_ENDIAN in m.h).";;esac # Determine alignment constraints volatile=""while true; do  sh runtest $volatile align.c  case $? in  100) echo "Your compiler chokes on the \"volatile\" modifier."       echo "Never mind, we'll do without it."       volatile="-Dvolatile=";;    0) echo "This architecture has no alignment constraints."       echo "#undef ALIGNMENT" >> m.h       break;;    1) echo "This architecture has alignment constraints."       echo "#define ALIGNMENT" >> m.h       break;;    *) echo "Something went wrong during alignment determination."       echo "I'm going to assume this architecture has alignment constraints."       echo "That's a safe bet: Caml Light will work even if it turns out that"       echo "this architecture actually has no alignment constraints."       echo "#define ALIGNMENT" >> m.h       break;;  esacdone sh runtest dblalign.ccase $? 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 Light will work even if it turns out that"     echo "this architecture actually has no alignment constraints."     echo "#define ALIGN_DOUBLE" >> m.h;;esac # To find a good byte copy 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.hfiif sh runtest -Dcopy=bcopy bytecopy.c; then  echo "Function \"bcopy\" is provided and handles overlapping moves correctly."  echo "#define HAS_BCOPY" >> s.hfiif sh runtest -Dcopy=memcpy -Dreverse bytecopy.c; then  echo "Function \"memcpy\" is provided and handles overlapping moves correctly."  echo "#define HAS_MEMCPY" >> s.hfi # Check for _longjmp and _setjmp sh runtest setjmp.ccase $? 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 # Try to find the type of signal handlers h="" for ty in void int; do  rm -f /tmp/output$$  if $cc -c -DSIGRETURN=$ty sighandler.c 2>/tmp/output$$; then    if grep -s -i warning /tmp/output$$; then      :    else      h=$ty      break    fi  fidonerm -f sighandler.o case "$h" in  "") echo "Sorry, I can't determine the return type for signal handlers."      echo "I'm assuming \"void\". If this seems to cause errors,"      echo "try to change \"sighandler_return_type\" in s.h"      h=void;;   *) echo "The return type for signal handlers appears to be \"$h\".";;esacecho "#define sighandler_return_type $h" >> s.h # Check the semantics of signal handlers ostype=`uname` if test "IRIX64" != "$ostype"; thenif sh runtest signals.c; then  echo "Signals have the BSD semantics."  echo "#define BSD_SIGNALS" >> s.helse  echo "Signals have the System V semantics."fifi # For the sys module if sh hasgot rename; then  echo "rename() found."  echo "#define HAS_RENAME" >> s.hfi if sh hasgot strerror; then  echo "strerror() found."  echo "#define HAS_STRERROR" >> s.hfi # For the Unix library if sh hasgot socket socketpair bind listen accept connect; then  echo "You have BSD sockets."  echo "#define HAS_SOCKETS" >> s.hfi if test -f /usr/include/unistd.h; then  echo "unistd.h found."  echo "#define HAS_UNISTD" >> s.hfi if test -f /usr/include/dirent.h; then  echo "dirent.h found."  echo "#define HAS_DIRENT" >> s.hfi if sh hasgot lockf; then  echo "lockf() found."  echo "#define HAS_LOCKF" >> s.hfi if sh hasgot mkfifo; then  echo "mkfifo() found."  echo "#define HAS_MKFIFO" >> s.hfi if sh hasgot getpriority setpriority; then  echo "getpriority() found."  echo "#define HAS_GETPRIORITY" >> s.hfi if test -f /usr/include/utime.h && sh hasgot utime; then  echo "utime() found."  echo "#define HAS_UTIME" >> s.hfi if sh hasgot utimes; then  echo "utimes() found."  echo "#define HAS_UTIMES" >> s.hfi if sh hasgot dup2; then  echo "dup2() found."  echo "#define HAS_DUP2" >> s.hfi if sh hasgot fchmod fchown; then  echo "fchmod() found."  echo "#define HAS_FCHMOD" >> s.hfi if sh hasgot truncate ftruncate; then  echo "truncate() found."  echo "#define HAS_TRUNCATE" >> s.hfi if sh hasgot select; then  echo "select() found."  echo "#define HAS_SELECT" >> s.hfi if sh hasgot symlink readlink lstat;  then  echo "symlink() found."  echo "#define HAS_SYMLINK" >> s.hfi if sh hasgot wait3;  then  echo "wait3() found."  echo "#define HAS_WAIT3" >> s.hfi if sh hasgot waitpid;  then  echo "waitpid() found."  echo "#define HAS_WAITPID" >> s.hfi if sh hasgot getgroups && test -f /usr/include/sys/param.h && grep -s NGROUPS /usr/include/sys/param.h >/dev/null;then  echo "getgroups() found."  echo "#define HAS_GETGROUPS" >> s.hfi if test -f /usr/include/termios.h &&    sh hasgot tcgetattr tcsetattr tcsendbreak tcflush tcflow; then  echo "POSIX termios found."  echo "#define HAS_TERMIOS" >> s.hfi rm -f tstrm -f ../m.h ../s.hmv m.h s.h ..