| 1 | #! /bin/sh |
| 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 | |
| 23 | # Identify Glibc systems under different names. |
| 24 | |
| 25 | case "$os" in GNU) os=GNU;; esac |
| 26 | case "$os" in GNU/*|Linux) os=Linux;; esac |
| 27 | |
| 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;; |
| 85 | NetBSD*) os=NetBSD;; |
| 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 | |
| 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). |
| 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 |
| 142 | # Non-ELF system |
| 143 | os="NetBSD-a.out" |
| 144 | fi |
| 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 |