Commit | Line | Data |
---|---|---|
61ec970d | 1 | #! /bin/sh |
61ec970d PH |
2 | |
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 | |
6 | # it." | |
7 | ||
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. | |
13 | ||
14 | # If EXIM_OSTYPE is set, use it. This allows a manual override. | |
15 | ||
16 | case "$EXIM_OSTYPE" in ?*) os="$EXIM_OSTYPE";; esac | |
17 | ||
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. | |
20 | ||
21 | case "$os" in '') os=`uname -s`;; esac | |
22 | ||
6e2b4ccc PH |
23 | # Identify Glibc systems under different names. |
24 | ||
bebaf0fc PH |
25 | case "$os" in GNU) os=GNU;; esac |
26 | case "$os" in GNU/*|Linux) os=Linux;; esac | |
6e2b4ccc | 27 | |
61ec970d PH |
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 | |
32 | # doesn't matter. | |
33 | ||
34 | case "$os" in '') os="$OSTYPE";; esac | |
35 | ||
36 | # Failed to find OS type. | |
37 | ||
38 | case "$os" in | |
39 | '') echo "" 1>&2 | |
40 | echo "*** Failed to determine the operating system type." 1>&2 | |
41 | echo "" 1>&2 | |
42 | echo UnKnown | |
43 | exit 1;; | |
44 | esac | |
45 | ||
46 | # Clean out gash characters | |
47 | ||
48 | os=`echo $os | sed 's,[^-+_.a-zA-Z0-9],,g'` | |
49 | ||
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. | |
55 | ||
56 | case "$os" in | |
57 | aix*) os=AIX;; | |
58 | AIX*) os=AIX;; | |
59 | bsdi*) os=BSDI;; | |
60 | BSDOS) os=BSDI;; | |
61 | BSD_OS) os=BSDI;; | |
62 | CYGWIN*) os=CYGWIN;; | |
63 | dgux) os=DGUX;; | |
64 | freebsd*) os=FreeBSD;; | |
65 | gnu) os=GNU;; | |
66 | Irix5) os=IRIX;; | |
67 | Irix6) os=IRIX6;; | |
68 | IRIX64) os=IRIX6;; | |
69 | irix6.5) os=IRIX65;; | |
70 | IRIX) version=`uname -r` | |
71 | case "$version" in | |
72 | 5*) os=IRIX;; | |
73 | 6.5) version=`uname -R | awk '{print $NF}'` | |
74 | version=`echo $version | sed 's,[^-+_a-zA-Z0-9],,g'` | |
75 | os=IRIX$version;; | |
76 | 6*) os=IRIX632;; | |
77 | esac;; | |
78 | HI-OSF1-MJ) os=HI-OSF;; | |
79 | HI-UXMPP) os=HI-OSF;; | |
80 | hpux*) os=HP-UX;; | |
81 | linux) os=Linux;; | |
82 | linux-*) os=Linux;; | |
83 | Linux-*) os=Linux;; | |
84 | netbsd*) os=NetBSD;; | |
9bf3d68f | 85 | NetBSD*) os=NetBSD;; |
61ec970d PH |
86 | openbsd*) os=OpenBSD;; |
87 | osf1) os=OSF1;; | |
88 | qnx*) os=QNX;; | |
89 | solaris*) os=SunOS5;; | |
90 | sunos4*) os=SunOS4;; | |
91 | UnixWare) os=Unixware7;; | |
92 | Ultrix) os=ULTRIX;; | |
93 | ultrix*) os=ULTRIX;; | |
94 | esac | |
95 | ||
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. | |
99 | ||
100 | case "$os" in | |
101 | SunOS) case `uname -r` in | |
102 | 5*) os="${os}5";; | |
103 | 4*) os="${os}4";; | |
104 | esac;; | |
105 | ||
106 | BSDI) case `uname -r` in | |
107 | 3*) os="${os}3";; | |
108 | 4.2*) os="${os}4.2";; | |
109 | 4*) os="${os}4";; | |
110 | esac;; | |
111 | ||
112 | HP-UX) case `uname -r` in | |
113 | A.09*) os="${os}-9";; | |
114 | esac;; | |
115 | esac | |
116 | ||
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. | |
120 | ||
121 | case "$os" in | |
122 | SunOS5) case `uname -m` in | |
123 | sun4H) os="${os}-hal";; | |
124 | *) os="${os}-`uname -r`";; | |
125 | esac | |
126 | ;; | |
127 | ||
e7ad8a65 PH |
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 | |
132 | # years old). | |
61ec970d PH |
133 | |
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 | |
139 | # ELF soon. | |
140 | ||
141 | NetBSD) if echo __ELF__ | ${CC-cc} -E - | grep -q __ELF__ ; then | |
bebaf0fc PH |
142 | # Non-ELF system |
143 | os="NetBSD-a.out" | |
144 | fi | |
61ec970d PH |
145 | ;; |
146 | ||
147 | esac | |
148 | ||
149 | # If a generic OS name is requested, some further massaging is needed | |
150 | # for some systems. | |
151 | ||
152 | if [ "$1" = '-generic' ]; then | |
153 | case "$os" in | |
154 | SunOS5*) os=SunOS5;; | |
155 | BSDI*) os=BSDI;; | |
156 | IRIX65*) os=IRIX65;; | |
157 | esac | |
158 | fi | |
159 | ||
160 | # OK, the script seems to have worked. Pass the value back. | |
161 | ||
162 | echo "$os" | |
163 | ||
164 | # End of os-type |