3 # Shell script to determine the operating system type. Some of the heuristics
4 # herein have accumulated over the years and may not strictly be needed now,
5 # but they are left in under the principle of "If it ain't broke, don't fix
8 # For some OS there are two variants: a full name, which is used for the
9 # build directory, and a generic name, which is used to identify the OS-
10 # specific scripts, and which can be the same for different versions of
11 # the OS. Solaris 2 is one such OS. The option -generic specifies the
12 # latter type of output.
14 # If EXIM_OSTYPE is set, use it. This allows a manual override.
16 case "$EXIM_OSTYPE" in ?
*) os
="$EXIM_OSTYPE";; esac
18 # Otherwise, try to get a value from the uname command. Use an explicit
19 # option just in case there are any systems where -s is not the default.
21 case "$os" in '') os
=`uname -s`;; esac
23 # Identify Glibc systems under different names.
25 case "$os" in GNU
) os
=GNU
;; esac
26 case "$os" in GNU
/*|Linux
) os
=Linux
;; esac
28 # It is believed that all systems respond to uname -s, but just in case
29 # there is one that doesn't, use the shell's $OSTYPE variable. It is known
30 # to be unhelpful for some systems (under IRIX is it "irix" and under BSDI
31 # 3.0 it may be "386BSD") but those systems respond to uname -s, so this
34 case "$os" in '') os
="$OSTYPE";; esac
36 # Failed to find OS type.
40 echo "*** Failed to determine the operating system type." 1>&2
46 # Clean out gash characters
48 os
=`echo $os | sed 's,[^-+_.a-zA-Z0-9],,g'`
50 # A value has been obtained for the os. Some massaging may be needed in
51 # some cases to get a uniform set of values. In earlier versions of this
52 # script, $OSTYPE was looked at before uname -s, and various shells set it
53 # to things that are subtly different. It is possible that some of this may
54 # no longer be needed.
64 freebsd
*) os
=FreeBSD
;;
70 IRIX
) version
=`uname -r`
73 6.5) version
=`uname -R | awk '{print $NF}'`
74 version
=`echo $version | sed 's,[^-+_a-zA-Z0-9],,g'`
78 HI-OSF1-MJ
) os
=HI-OSF
;;
86 openbsd
*) os
=OpenBSD
;;
91 UnixWare
) os
=Unixware7
;;
96 # In the case of SunOS we need to distinguish between SunOS4 and Solaris (aka
97 # SunOS5); in the case of BSDI we need to distinguish between versions 3 and 4;
98 # in the case of HP-UX we need to distinguish between version 9 and later.
101 SunOS
) case `uname -r` in
106 BSDI
) case `uname -r` in
108 4.2*) os
="${os}4.2";;
112 HP-UX
) case `uname -r` in
113 A
.09*) os
="${os}-9";;
117 # Need to distinguish Solaris from the version on the HAL (64bit sparc,
118 # CC=hcc -DV7). Also need to distinguish different versions of the OS
119 # for building different binaries.
122 SunOS5
) case `uname -m` in
123 sun4H
) os
="${os}-hal";;
124 *) os
="${os}-`uname -r`";;
128 # In the case of Linux we used to distinguish which libc was used so that
129 # the old libc5 was supported as well as the current glibc. This support
130 # was giving some people problems, so it was removed in June 2005, under
131 # the assumption that nobody would be using libc5 any more (it is over seven
134 # In the case of NetBSD we need to distinguish between a.out, ELF
135 # and COFF binary formats. However, a.out and COFF are the same
136 # for our purposes, so both of them are defined as "a.out".
137 # Todd Vierling of Wasabi Systems reported that NetBSD/sh3 (the
138 # only NetBSD port that uses COFF binary format) will switch to
141 NetBSD
) if echo __ELF__ |
${CC-cc} -E - |
grep -q __ELF__
; then
149 # If a generic OS name is requested, some further massaging is needed
152 if [ "$1" = '-generic' ]; then
160 # OK, the script seems to have worked. Pass the value back.