#!/bin/shcase $1 in "") cc=cc;; *) cc=$1;;esacexport cccd auto-auxrm -f s.h m.h# Check the sizes of data typesecho "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 endiannesssh 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 constraintsvolatile=""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;; esacdonesh 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 functionif 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 _setjmpsh 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 handlersh=""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.ocase "$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 handlersostype=`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 moduleif sh hasgot rename; then echo "rename() found." echo "#define HAS_RENAME" >> s.hfiif sh hasgot strerror; then echo "strerror() found." echo "#define HAS_STRERROR" >> s.hfi# For the Unix libraryif sh hasgot socket socketpair bind listen accept connect; then echo "You have BSD sockets." echo "#define HAS_SOCKETS" >> s.hfiif test -f /usr/include/unistd.h; then echo "unistd.h found." echo "#define HAS_UNISTD" >> s.hfiif test -f /usr/include/dirent.h; then echo "dirent.h found." echo "#define HAS_DIRENT" >> s.hfiif sh hasgot lockf; then echo "lockf() found." echo "#define HAS_LOCKF" >> s.hfiif sh hasgot mkfifo; then echo "mkfifo() found." echo "#define HAS_MKFIFO" >> s.hfiif sh hasgot getpriority setpriority; then echo "getpriority() found." echo "#define HAS_GETPRIORITY" >> s.hfiif test -f /usr/include/utime.h && sh hasgot utime; then echo "utime() found." echo "#define HAS_UTIME" >> s.hfiif sh hasgot utimes; then echo "utimes() found." echo "#define HAS_UTIMES" >> s.hfiif sh hasgot dup2; then echo "dup2() found." echo "#define HAS_DUP2" >> s.hfiif sh hasgot fchmod fchown; then echo "fchmod() found." echo "#define HAS_FCHMOD" >> s.hfiif sh hasgot truncate ftruncate; then echo "truncate() found." echo "#define HAS_TRUNCATE" >> s.hfiif sh hasgot select; then echo "select() found." echo "#define HAS_SELECT" >> s.hfiif sh hasgot symlink readlink lstat; then echo "symlink() found." echo "#define HAS_SYMLINK" >> s.hfiif sh hasgot wait3; then echo "wait3() found." echo "#define HAS_WAIT3" >> s.hfiif sh hasgot waitpid; then echo "waitpid() found." echo "#define HAS_WAITPID" >> s.hfiif 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.hfiif test -f /usr/include/termios.h && sh hasgot tcgetattr tcsetattr tcsendbreak tcflush tcflow; then echo "POSIX termios found." echo "#define HAS_TERMIOS" >> s.hfirm -f tstrm -f ../m.h ../s.hmv m.h s.h ..
#!/bin/sh
case $1 in
"") cc=cc;;
*) cc=$1;;
esac
export cc
cd auto-aux
rm -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.c
case $? 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.c
case $? 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;;
esac
done
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 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.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
if sh runtest -Dcopy=memcpy -Dreverse bytecopy.c; then
echo "Function \"memcpy\" is provided and handles overlapping moves correctly."
echo "#define HAS_MEMCPY" >> 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
# 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
fi
done
rm -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\".";;
esac
echo "#define sighandler_return_type $h" >> s.h
# Check the semantics of signal handlers
ostype=`uname`
if test "IRIX64" != "$ostype"; then
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
fi
# For the sys module
if sh hasgot rename; then
echo "rename() found."
echo "#define HAS_RENAME" >> s.h
fi
if sh hasgot strerror; then
echo "strerror() found."
echo "#define HAS_STRERROR" >> s.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 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 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.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
rm -f tst
rm -f ../m.h ../s.h
mv m.h s.h ..