i-bash/support/mksysdefs
2009-09-12 16:46:49 +00:00

497 lines
12 KiB
Bash
Executable file

#!/bin/sh
#
# This file creates a file called "sysdefs.h" which contains CPP defines
# helping to describe the operating system features. We just take guesses
# by looking at random files.
# Removes any inherited definitions.
SYSDEF=
MAKE_ANSI=
while [ $# -gt 0 ]; do
case "$1" in
-s) shift; srcdir=$1; shift ;;
-i) shift; incdir="$1"; shift ;;
-A) shift; MAKE_ANSI=true ;;
*) break ;;
esac
done
if [ -n "$1" ]; then
sysdefs=$1
else
sysdefs=./sysdefs.h
fi
if [ -z "$srcdir" ]; then
srcdir=.
fi
rm -f $sysdefs
echo "/* sysdefs.h -- #defines for your system created by $0." >>$sysdefs
echo " Do NOT EDIT this file, since any changes will disappear." >>$sysdefs
echo " Instead, edit $0, or config.h, or machines.h. */" >>$sysdefs
echo "" >>$sysdefs
echo "#if !defined (_SYSDEFS_H_)" >>$sysdefs
echo "# define _SYSDEFS_H_" >>$sysdefs
# was if [ -f /usr/bin/uname ] || [ -f /bin/uname ]
if ( uname >/dev/null 2>&1 ) 2>/dev/null
then
UNAME=`uname`
UNAME_R=`uname -r 2>/dev/null`
UNAME_M=`uname -m 2>/dev/null`
UNAME_V=`uname -v 2>/dev/null`
UNAME_S=`uname -s 2>/dev/null`
RELEASE=`expr "$UNAME_R" : '[^0-9]*\([0-9]*\)'`
case "$RELEASE" in
"") RELEASE=0 ;;
*) RELEASE=`expr "$RELEASE" + 0` ;;
esac
LEVEL=`expr "$UNAME_R" : '[^0-9]*[0-9]*.\([0-9]*\)'`
fi
# check for versions of SunOS and BSD/OS
case "${UNAME}${RELEASE}" in
SunOS4*) SYSDEF=SunOS4 ;;
SunOS5*) SYSDEF=SunOS5 ;;
BSD/OS2*) SYSDEF=BSDI2 ;;
esac
# Test for NeXT
if [ -d /NextLibrary ]; then
MAKE_ANSI=true
fi
# Intel Paragon
case "$UNAME_M" in
paragon) MAKE_ANSI=true ;;
esac
# Test for shared libraries (this is pretty sVr4ish).
if [ -f /usr/ccs/lib/libc.so ]; then
SYSDEF=USGr4
fi
# Some versions of i386 SVR4.2 make `uname' equivalent to `uname -n', which
# is contrary to all other versions of uname
if [ -n "$UNAME" ] && [ "$UNAME_S" != "$UNAME" ] && [ "$UNAME_S" = UNIX_SV ]; then
UNAME=UNIX_SV
fi
# (sound of teeth grinding...)
if [ "$UNAME" = "UNIX_SV" ] && [ "$UNAME_R" != "4.2" ] && [ "$RELEASE"."$LEVEL" = "4.2" ]; then
UNAME_R="4.2"
fi
# another check for SVR4 on 386 or 486 machines
case "${UNAME_M}:${UNAME}:${UNAME_R}" in
i[34]86:UNIX_SV:4.*) SYSDEF=USGr4 ;;
esac
# A check for Mips RISCos
case "$UNAME_V" in
UMIPS|RISCos) SYSDEF=RISCos_${RELEASE}_${LEVEL} ;;
esac
# A check for Amdahl UTS
case "$UNAME" in
uts) SYSDEF=UTS ;;
esac
# Look for an error message when trying to exec bison. If we find
# what we're looking for, then we don't have it. If we get something
# else (like an error message about no grammar file), then we have
# it.
HAVE_BISON=
if ( cd /tmp ; bison /dev/null 2>&1 >/dev/null | grep 'no input grammar' >/dev/null 2>&1 ) 2>/dev/null
then
HAVE_BISON=yes
fi
# Try to locate ranlib. I think this is a bad idea.
if sh ${srcdir}/support/inpath ranlib; then
RANLIB_LOCATION=ranlib
elif [ -f /usr/bin/ranlib ]; then
RANLIB_LOCATION=/usr/bin/ranlib;
elif [ -f /bin/ranlib ]; then
RANLIB_LOCATION=/bin/ranlib;
elif [ -f /usr/local/bin/ranlib ]; then
RANLIB_LOCATION=/usr/local/bin/ranlib;
elif [ -f /usr/local/gnubin/ranlib ]; then
RANLIB_LOCATION=/usr/local/gnubin/ranlib;
else
RANLIB_LOCATION=: # XXX
fi
if [ -n "${RANLIB_LOCATION}" ]; then
echo "" >>$sysdefs
echo "#if !defined (RANLIB_LOCATION)" >>$sysdefs
echo "# define RANLIB_LOCATION ${RANLIB_LOCATION}" >>$sysdefs
echo "#endif /* RANLIB_LOCATION */" >>$sysdefs
fi
#
# Is this a Xenix system?
#
if [ -f /xenix ]; then
SYSDEF="Xenix"
case "`/bin/uname -p`" in
*286) SYSDEF="Xenix286" ;;
*386) SYSDEF="Xenix386" ;;
esac
# make sure that `i386' is defined for machines.h
if [ "$SYSDEF" = "Xenix386" ]; then
echo "" >>$sysdefs
echo "#if !defined (i386)" >>$sysdefs
echo "# define i386" >>$sysdefs
echo "#endif /* !i386 */" >>$sysdefs
fi
# Pass the release number of the OS through to the machine descriptions
# in machines.h.
if [ -f /etc/perms/soft ]; then
rel=`grep rel= /etc/perms/soft`
case "$rel" in
*2.2.*) XREL=XENIX_22 ;;
*2.3.*) XREL=XENIX_23 ;;
*3.2.*) XREL=XENIX_32 ;;
*) XREL= ;;
esac
if [ "$XREL" ]; then
echo "" >>$sysdefs
echo "#if !defined ($XREL)" >>$sysdefs
echo "# define $XREL" >>$sysdefs
echo "#endif /* !$XREL */" >>$sysdefs
fi
fi
fi
#
# Is this some kind of Sys Vish system?
#
if [ -f /unix ]; then
if [ -d /generic ]; then # This is an AIX system.
SYSDEF="aixpc"
MAKE_ANSI=true
elif [ -d /etc/conf/kconfig.d ] && [ -f /usr/include/sys/limits.h ]; then
SYSDEF="isc386" # This is a 386 running ISC?
ISCREL="ISC_$RELEASE"
echo "#if !defined ($ISCREL)" >>$sysdefs
echo "# define $ISCREL" >>$sysdefs
echo "#endif /* $ISCREL */" >>$sysdefs
elif [ -f /etc/xlc.cfg ]; then
if fgrep _IBMR2 /etc/xlc.cfg >/dev/null 2>&1; then
SYSDEF=RISC6000
MAKE_ANSI=true
fi
elif [ -f /bin/4d -a -f /bin/uname ]; then
case "$UNAME_R" in
3.*) SYSDEF="Irix3" ;;
4.*) SYSDEF="Irix4" ;;
5.*) SYSDEF="Irix5" ;;
6.*) SYSDEF="Irix6" ;;
*) SYSDEF="Irix3" ;;
esac
elif [ -d /usr/amiga ]; then
SYSDEF="amiga" # An Amiga running V.4.
elif [ -f /bin/fxc.info ]; then
SYSDEF="alliant"
fi
fi
# Is this a Unicos system?
if [ -f /unicos ]; then
MAKE_ANSI=true
UnicosMachine=
# Test for the variaous flavors of Cray machines.
if [ -x /bin/cray1 ] && /bin/cray1 2>/dev/null; then
UnicosMachine=Cray1
fi
if [ -x /bin/cray2 ] && /bin/cray2 2>/dev/null; then
UnicosMachine=Cray2
fi
if [ -x /bin/crayxmp ] && /bin/crayxmp 2>/dev/null; then
UnicosMachine=CrayXMP
fi
if [ -x /bin/crayymp ] && /bin/crayymp 2>/dev/null; then
UnicosMachine=CrayYMP
fi
if [ "$UnicosMachine" ]; then
echo "#if !defined ($UnicosMachine)" >>$sysdefs
echo "# define $UnicosMachine" >>$sysdefs
echo "#endif /* !$UnicosMachine */" >>$sysdefs
fi
fi
# Is this (and what kind of) a HPUX system?
if [ -f /hp-ux ]; then
SYSDEF=HPUX_${RELEASE}
if [ "$RELEASE" = 6 -a "$LEVEL" -lt 2 ]; then
SYSDEF=HPUX_USG
fi
fi
if [ "$SYSDEF" = "" ]; then
case "$UNAME_M" in
ESA) SYSDEF=AIXESA ;;
XD88*) SYSDEF=XD88 ;;
M88100) SYSDEF=M88100 ;; # Motorola Delta 88K
esac
fi
if [ "$SYSDEF" = "" ]; then
case "$UNAME_V" in
V[0-9]*L[0-9]*) SYSDEF=UXP ;; # Fujitsu DS/90
esac
fi
# What release of SCO Unix is this?
if [ "$SYSDEF" = "" -a -f /bin/uname ]; then
case `/bin/uname -X 2>/dev/null | grep '^Release' 2>/dev/null` in
*3.2v4.*) SYSDEF=SCOv4 ;;
*3.2v5.*) SYSDEF=SCOv5 ;;
*) SYSDEF=SCO ;;
esac
fi
#
# Default to cadmus for unknown SysVish systems
#
if [ -f /unix ] && [ "$SYSDEF" = "" ]; then
SYSDEF="cadmus"
fi
if [ "$SYSDEF" != "" ]; then
echo "" >>$sysdefs
echo "#if !defined ($SYSDEF)" >>$sysdefs
echo "# define $SYSDEF" >>$sysdefs
echo "#endif /* $SYSDEF */" >>$sysdefs
fi
# Now look for certain include files in a list of directories
# Poor substitute for autoconf
# Add any other directories where include files are found to this list or
# create another case
if [ -n "$incdir" ]; then
dirlist="$incdir"
else
case "$SYSDEF" in
RISCos*) dirlist="/bsd43/usr/include";;
*) dirlist="/usr/include /usr/include/bsd /usr/include/ansi" ;;
esac
fi
# Code fragment to be executed to find a particular include file. Make sure
# to set `file' to the pathname of the file you want, relative to /usr/include,
# before calling `eval $findf'.
findf="
found='';
for d in \$dirlist;
do
if test -f \$d/\$file;
then
found=yes;
break;
fi;
done
"
found=
file=sys/stream.h
eval $findf
if [ -n "$found" ]; then
echo "" >>$sysdefs
echo "#if !defined (HAVE_SYS_STREAM_H)" >>$sysdefs
echo "# define HAVE_SYS_STREAM_H" >>$sysdefs
echo "#endif /* HAVE_SYS_STREAM_H */" >>$sysdefs
fi
found=
file=sys/ptem.h
eval $findf
if [ -n "$found" ]; then
echo "" >>$sysdefs
echo "#if !defined (HAVE_SYS_PTEM_H)" >>$sysdefs
echo "# define HAVE_SYS_PTEM_H" >>$sysdefs
echo "#endif /* HAVE_SYS_PTEM_H */" >>$sysdefs
fi
file=sys/pte.h
eval $findf
if [ -n "$found" ]; then
echo "" >>$sysdefs
echo "#if !defined (HAVE_SYS_PTE_H)" >>$sysdefs
echo "# define HAVE_SYS_PTE_H" >>$sysdefs
echo "#endif /* HAVE_SYS_PTE_H */" >>$sysdefs
fi
file=sys/wait.h
eval $findf
if [ -n "$found" ]; then
echo "" >>$sysdefs
echo "#if !defined (HAVE_WAIT_H)" >>$sysdefs
echo "# define HAVE_WAIT_H" >>$sysdefs
echo "#endif /* HAVE_WAIT_H */" >>$sysdefs
fi
file=sys/resource.h
eval $findf
if [ -n "$found" ]; then
echo "" >>$sysdefs
echo "#if !defined (HAVE_RESOURCE)" >>$sysdefs
echo "# define HAVE_RESOURCE" >>$sysdefs
echo "#endif /* HAVE_RESOURCE */" >>$sysdefs
fi
file=sys/param.h
eval $findf
if [ -n "$found" ]; then
echo "" >>$sysdefs
echo "#if !defined (HAVE_SYS_PARAM)" >>$sysdefs
echo "# define HAVE_SYS_PARAM" >>$sysdefs
echo "#endif /* HAVE_SYS_PARAM */" >>$sysdefs
fi
file=unistd.h
eval $findf
if [ -n "$found" ]; then
echo "" >>$sysdefs
echo "#if !defined (HAVE_UNISTD_H)" >>$sysdefs
echo "# define HAVE_UNISTD_H" >>$sysdefs
echo "#endif /* HAVE_UNISTD_H */" >>$sysdefs
fi
file=stdlib.h
eval $findf
if [ -n "$found" ]; then
echo "" >>$sysdefs
echo "#if !defined (HAVE_STDLIB_H)" >>$sysdefs
echo "# define HAVE_STDLIB_H" >>$sysdefs
echo "#endif /* HAVE_STDLIB_H */" >>$sysdefs
fi
file=limits.h
eval $findf
if [ -n "$found" ]; then
echo "" >>$sysdefs
echo "#if !defined (HAVE_LIMITS_H)" >>$sysdefs
echo "# define HAVE_LIMITS_H" >>$sysdefs
echo "#endif /* HAVE_LIMITS_H */" >>$sysdefs
fi
file=alloca.h
eval $findf
if [ -f /usr/include/alloca.h ]; then
echo "" >>$sysdefs
echo "#if !defined (HAVE_ALLOCA_H)" >>$sysdefs
echo "# define HAVE_ALLOCA_H" >>$sysdefs
echo "#endif /* HAVE_ALLOCA_H */" >>$sysdefs
fi
file=dirent.h
eval $findf
if [ -n "$found" ]; then
echo "" >>$sysdefs
echo "#if !defined (HAVE_DIRENT_H)" >>$sysdefs
echo "# define HAVE_DIRENT_H" >>$sysdefs
echo "#endif /* HAVE_DIRENT_H */" >>$sysdefs
fi
file=string.h
eval $findf
if [ -n "$found" ]; then
echo "" >>$sysdefs
echo "#if !defined (HAVE_STRING_H)" >>$sysdefs
echo "# define HAVE_STRING_H" >>$sysdefs
echo "#endif /* HAVE_STRING_H */" >>$sysdefs
fi
file=varargs.h
eval $findf
if [ -n "$found" ]; then
echo "" >>$sysdefs
echo "#if !defined (HAVE_VARARGS_H)" >>$sysdefs
echo "# define HAVE_VARARGS_H" >>$sysdefs
echo "#endif /* HAVE_VARARGS_H */" >>$sysdefs
fi
# Does the system have a /dev/fd directory?
if [ -d /dev/fd ]; then
echo "" >>$sysdefs
echo "#if !defined (HAVE_DEV_FD)" >>$sysdefs
echo "# define HAVE_DEV_FD" >>$sysdefs
echo "#endif /* HAVE_DEV_FD */" >>$sysdefs
fi
# Is this SVR4.2? It's subtly different from USGr4
if [ "$UNAME" = "UNIX_SV" ] && [ "$UNAME_R" = "4.2" ]; then
echo "" >>$sysdefs
echo "#if !defined (USGr4_2)" >>$sysdefs
echo "# define USGr4_2" >>$sysdefs
echo "#endif /* USGr4_2 */" >>$sysdefs
fi
# Is this AIX PS/2 1.3? Yuck.
if [ "$UNAME" = "AIX" ] && [ "$UNAME_V" = "1" ] && [ "$RELEASE" = "3" ]; then
case "$UNAME_M" in
i386|i486)
echo "" >>$sysdefs
echo "#if !defined (AIX_13)" >>$sysdefs
echo "# define AIX_13" >>$sysdefs
echo "#endif /* AIX_13 */" >>$sysdefs
;;
esac
fi
if [ -n "$HAVE_BISON" ]; then
echo "" >>$sysdefs
echo "#if !defined (HAVE_BISON)" >>$sysdefs
echo "# define HAVE_BISON" >>$sysdefs
echo "#endif /* HAVE_BISON */" >>$sysdefs
fi
# Functions to test for a la autoconf
# getwd
# getcwd
# strchr
# strcasecmp
# getgroups
# setlinebuf
# strerror
# vfprintf
# bcopy
# getdtablesize
# setdtablesize
# alloca
# gethostname
# memmove (missing)
# mkfifo (missing)
#
# Other things to test
# opendir robustness
# dup2 working
# void sighandler
# sys_siglist[]
# uid_t, gid_t
# have_getpw_decls
# reversed setvbuf args
# int getgroups
# If this system's cpp might not like `/**/#' in cpp-Makefile, make an
# alternate ansi-style cpp-Makefile.
if [ -n "$MAKE_ANSI" ]; then
grep -v '/\*\*/' ${srcdir}/cpp-Makefile >ansi-Makefile
fi
# These should be the last 2 lines in this file!
echo "" >>$sysdefs
echo "#endif /* _SYSDEFS_H_ */" >>$sysdefs