3 # os.sh - operating system specifics
6 # This file is included at the start of processing. Its role is
7 # to set the variables OS, OSREL, OSMAJOR, MACHINE and MACHINE_ARCH to
8 # reflect the current system.
10 # It also sets variables such as MAILER, LOCAL_FS, PS_AXC to hide
11 # certain aspects of different UNIX flavours.
17 # Simon J. Gerraty <sjg@crufty.net>
20 # $Id: os.sh,v 1.62 2023/01/17 18:30:21 sjg Exp $
22 # @(#) Copyright (c) 1994 Simon J. Gerraty
24 # This file is provided in the hope that it will
25 # be of use. There is absolutely NO WARRANTY.
26 # Permission to copy, redistribute or otherwise
27 # use this file is hereby granted provided that
28 # the above copyright notice and this notice are
31 # Please send copies of changes and bug-fixes to:
35 # this lets us skip sourcing it again
40 OSMAJOR=`IFS=.; set $OSREL; echo $1`
42 MACHINE_ARCH=`uname -p 2>/dev/null || echo $MACHINE`
44 # there is at least one case of `uname -p` outputting
45 # a bunch of usless drivel
46 case "$MACHINE_ARCH" in
47 unknown|*[!A-Za-z0-9_-]*) MACHINE_ARCH="$MACHINE";;
50 # we need this here, and it is not always available...
57 /*) test $t $1 && echo $1;;
59 # some shells cannot correctly handle `IFS`
60 # in conjunction with the for loop.
61 _dirs=`IFS=:; echo ${2:-$PATH}`
64 test $t $d/$1 && { echo $d/$1; break; }
70 # tr is insanely non-portable wrt char classes, so we need to
71 # spell out the alphabet. sed y/// would work too.
73 ${TR:-tr} abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ
77 ${TR:-tr} ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz
82 AIX) # everyone loves to be different...
85 OSREL="$OSMAJOR.$OSMINOR"
88 SHARE_ARCH=$OS/$OSMAJOR.X
90 Darwin) # a bit like BSD
94 CHOWN=`Which chown /usr/etc:/usr/bin`
97 # Great! Solaris keeps moving arch(1)
98 # should just bite the bullet and use uname -p
99 arch=`Which arch /usr/bin:/usr/ucb`
106 # uname -m just says sun which could be anything
109 MACHINE=$MACHINE_ARCH
119 # can you believe that ln on Solaris defaults to
120 # overwriting an existing file!!!!! We want one that works!
121 test -x /usr/xpg4/bin/ln && LN=${LN:-/usr/xpg4/bin/ln}
122 # wonderful, 5.8's tr again require's []'s
123 # but /usr/xpg4/bin/tr causes problems if LC_COLLATE is set!
124 # use toUpper/toLower instead.
127 case "$OS/$MACHINE_ARCH" in
128 *sun386) SHARE_ARCH=$MACHINE_ARCH;;
141 # NetBSD at least has good backward compatibility
142 # so NetBSD/i386 is good enough
147 SHARE_ARCH=$OS/$HOST_ARCH
150 arch=`Which arch /usr/bin:/usr/ucb:$PATH`
151 MACHINE_ARCH=`$arch -s`
158 TMP_DIRS="/tmp /usr/tmp"
161 # don't rely on /bin/sh, its broken
162 _shell=/bin/ksh; ENV=
163 # also, no one would be interested in OSMAJOR=A
165 ?.09*) OSMAJOR=9; PS_AXC=-e;;
166 ?.10*) OSMAJOR=10; PS_AXC=-e;;
178 OSMAJOR=`IFS=.; set $OSREL; echo $1`
179 MACHINE_ARCH=`uname -m`
182 # Not really any such thing as Linux, but
183 # this covers red-hat and hopefully others.
185 i?86) MACHINE_ARCH=i386;; # we don't care about i686 vs i586
189 [ -x /usr/bin/md5sum ] && { MD5=/usr/bin/md5sum; export MD5; }
193 x86pc) MACHINE_ARCH=i386;;
198 BeBox) MACHINE_ARCH=powerpc;;
199 BeMac) MACHINE_ARCH=powerpc;;
200 BePC) MACHINE_ARCH=i386;;
204 LOCALBASE=${LOCALBASE:-/usr/local}
206 HOSTNAME=${HOSTNAME:-`( hostname ) 2>/dev/null`}
207 HOSTNAME=${HOSTNAME:-`( uname -n ) 2>/dev/null`}
209 *.*) HOST=`IFS=.; set -- $HOSTNAME; echo $1`;;
213 TMP_DIRS=${TMP_DIRS:-"/tmp /var/tmp"}
214 MACHINE_ARCH=${MACHINE_ARCH:-$MACHINE}
215 HOST_ARCH=${HOST_ARCH:-$MACHINE_ARCH}
217 x86*64|amd64) MACHINE32_ARCH=i386;;
218 *64) MACHINE32_ARCH=`echo $MACHINE_ARCH | sed 's,64,32,'`;;
219 *) MACHINE32_ARCH=$MACHINE_ARCH;;
221 HOST_ARCH32=${HOST_ARCH32:-$MACHINE32_ARCH}
222 # we mount server:/share/arch/$SHARE_ARCH as /usr/local
223 SHARE_ARCH_DEFAULT=$OS/$OSMAJOR.X/$HOST_ARCH
224 SHARE_ARCH=${SHARE_ARCH:-$SHARE_ARCH_DEFAULT}
228 # Some people like have /share/$HOST_TARGET/bin etc.
229 HOST_TARGET=`echo ${OS}${OSMAJOR}-$HOST_ARCH | tr -d / | toLower`
230 HOST_TARGET32=`echo ${OS}${OSMAJOR}-$HOST_ARCH32 | tr -d / | toLower`
231 export HOST_TARGET HOST_TARGET32
233 case `echo -n .` in -n*) echo_n=; echo_c="\c";; *) echo_n=-n; echo_c=;; esac
237 -n) shift; echo $echo_n "$@$echo_c";;
242 # for systems that deprecate egrep
243 case "`echo egrep | egrep 'e|g' 2>&1`" in
245 *) egrep() { grep -E "$@"; };;
249 export OS MACHINE MACHINE_ARCH OSREL OSMAJOR LOCAL_FS TMP_DIRS MAILER N C K PS_AXC
250 export LN SHARE_ARCH TR
261 */host_target32) echo $HOST_TARGET32;;
262 */host_target) echo $HOST_TARGET;;