1: 2# NAME: 3# os.sh - operating system specifics 4# 5# DESCRIPTION: 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. 9# 10# It also sets variables such as MAILER, LOCAL_FS, PS_AXC to hide 11# certain aspects of different UNIX flavours. 12# 13# SEE ALSO: 14# site.sh,funcs.sh 15# 16# AUTHOR: 17# Simon J. Gerraty <sjg@crufty.net> 18 19# RCSid: 20# $Id: os.sh,v 1.62 2023/01/17 18:30:21 sjg Exp $ 21# 22# @(#) Copyright (c) 1994 Simon J. Gerraty 23# 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 29# left intact. 30# 31# Please send copies of changes and bug-fixes to: 32# sjg@crufty.net 33# 34 35# this lets us skip sourcing it again 36_OS_SH=: 37 38OS=`uname` 39OSREL=`uname -r` 40OSMAJOR=`IFS=.; set $OSREL; echo $1` 41MACHINE=`uname -m` 42MACHINE_ARCH=`uname -p 2>/dev/null || echo $MACHINE` 43 44# there is at least one case of `uname -p` outputting 45# a bunch of usless drivel 46case "$MACHINE_ARCH" in 47unknown|*[!A-Za-z0-9_-]*) MACHINE_ARCH="$MACHINE";; 48esac 49 50# we need this here, and it is not always available... 51Which() { 52 case "$1" in 53 -*) t=$1; shift;; 54 *) t=-x;; 55 esac 56 case "$1" in 57 /*) test $t $1 && echo $1;; 58 *) 59 # some shells cannot correctly handle `IFS` 60 # in conjunction with the for loop. 61 _dirs=`IFS=:; echo ${2:-$PATH}` 62 for d in $_dirs 63 do 64 test $t $d/$1 && { echo $d/$1; break; } 65 done 66 ;; 67 esac 68} 69 70# tr is insanely non-portable wrt char classes, so we need to 71# spell out the alphabet. sed y/// would work too. 72toUpper() { 73 ${TR:-tr} abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ 74} 75 76toLower() { 77 ${TR:-tr} ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz 78} 79 80K= 81case "$OS" in 82AIX) # everyone loves to be different... 83 OSMAJOR=`uname -v` 84 OSMINOR=`uname -r` 85 OSREL="$OSMAJOR.$OSMINOR" 86 LOCAL_FS=jfs 87 PS_AXC=-e 88 SHARE_ARCH=$OS/$OSMAJOR.X 89 ;; 90Darwin) # a bit like BSD 91 HOST_ARCH=$MACHINE 92 ;; 93SunOS) 94 CHOWN=`Which chown /usr/etc:/usr/bin` 95 export CHOWN 96 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` 100 101 MAILER=/usr/ucb/Mail 102 LOCAL_FS=4.2 103 104 case "$OSREL" in 105 4.0*) 106 # uname -m just says sun which could be anything 107 # so use arch(1). 108 MACHINE_ARCH=`arch` 109 MACHINE=$MACHINE_ARCH 110 ;; 111 4*) 112 MACHINE_ARCH=`arch` 113 ;; 114 5*) 115 K=-k 116 LOCAL_FS=ufs 117 MAILER=mailx 118 PS_AXC=-e 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. 125 ;; 126 esac 127 case "$OS/$MACHINE_ARCH" in 128 *sun386) SHARE_ARCH=$MACHINE_ARCH;; 129 esac 130 ;; 131*BSD) 132 K=-k 133 MAILER=/usr/bin/Mail 134 LOCAL_FS=local 135 : $-,$ENV 136 case "$-,$ENV" in 137 *i*,*) ;; 138 *,|*ENVFILE*) ;; 139 *) ENV=;; 140 esac 141 # NetBSD at least has good backward compatibility 142 # so NetBSD/i386 is good enough 143 case $OS in 144 NetBSD) 145 LOCALBASE=/usr/pkg 146 HOST_ARCH=$MACHINE 147 SHARE_ARCH=$OS/$HOST_ARCH 148 ;; 149 OpenBSD) 150 arch=`Which arch /usr/bin:/usr/ucb:$PATH` 151 MACHINE_ARCH=`$arch -s` 152 ;; 153 esac 154 NAWK=awk 155 export NAWK 156 ;; 157HP-UX) 158 TMP_DIRS="/tmp /usr/tmp" 159 LOCAL_FS=hfs 160 MAILER=mailx 161 # don't rely on /bin/sh, its broken 162 _shell=/bin/ksh; ENV= 163 # also, no one would be interested in OSMAJOR=A 164 case "$OSREL" in 165 ?.09*) OSMAJOR=9; PS_AXC=-e;; 166 ?.10*) OSMAJOR=10; PS_AXC=-e;; 167 esac 168 ;; 169IRIX) 170 LOCAL_FS=efs 171 ;; 172Interix) 173 MACHINE=i386 174 MACHINE_ARCH=i386 175 ;; 176UnixWare|SCO_SV) 177 OSREL=`uname -v` 178 OSMAJOR=`IFS=.; set $OSREL; echo $1` 179 MACHINE_ARCH=`uname -m` 180 ;; 181Linux) 182 # Not really any such thing as Linux, but 183 # this covers red-hat and hopefully others. 184 case $MACHINE in 185 i?86) MACHINE_ARCH=i386;; # we don't care about i686 vs i586 186 esac 187 LOCAL_FS=ext2 188 PS_AXC=axc 189 [ -x /usr/bin/md5sum ] && { MD5=/usr/bin/md5sum; export MD5; } 190 ;; 191QNX) 192 case $MACHINE in 193 x86pc) MACHINE_ARCH=i386;; 194 esac 195 ;; 196Haiku) 197 case $MACHINE in 198 BeBox) MACHINE_ARCH=powerpc;; 199 BeMac) MACHINE_ARCH=powerpc;; 200 BePC) MACHINE_ARCH=i386;; 201 esac 202 ;; 203esac 204LOCALBASE=${LOCALBASE:-/usr/local} 205 206HOSTNAME=${HOSTNAME:-`( hostname ) 2>/dev/null`} 207HOSTNAME=${HOSTNAME:-`( uname -n ) 2>/dev/null`} 208case "$HOSTNAME" in 209*.*) HOST=`IFS=.; set -- $HOSTNAME; echo $1`;; 210*) HOST=$HOSTNAME;; 211esac 212 213TMP_DIRS=${TMP_DIRS:-"/tmp /var/tmp"} 214MACHINE_ARCH=${MACHINE_ARCH:-$MACHINE} 215HOST_ARCH=${HOST_ARCH:-$MACHINE_ARCH} 216case "$HOST_ARCH" in 217x86*64|amd64) MACHINE32_ARCH=i386;; 218*64) MACHINE32_ARCH=`echo $MACHINE_ARCH | sed 's,64,32,'`;; 219*) MACHINE32_ARCH=$MACHINE_ARCH;; 220esac 221HOST_ARCH32=${HOST_ARCH32:-$MACHINE32_ARCH} 222# we mount server:/share/arch/$SHARE_ARCH as /usr/local 223SHARE_ARCH_DEFAULT=$OS/$OSMAJOR.X/$HOST_ARCH 224SHARE_ARCH=${SHARE_ARCH:-$SHARE_ARCH_DEFAULT} 225LN=${LN:-ln} 226TR=${TR:-tr} 227 228# Some people like have /share/$HOST_TARGET/bin etc. 229HOST_TARGET=`echo ${OS}${OSMAJOR}-$HOST_ARCH | tr -d / | toLower` 230HOST_TARGET32=`echo ${OS}${OSMAJOR}-$HOST_ARCH32 | tr -d / | toLower` 231export HOST_TARGET HOST_TARGET32 232 233case `echo -n .` in -n*) echo_n=; echo_c="\c";; *) echo_n=-n; echo_c=;; esac 234 235Echo() { 236 case "$1" in 237 -n) shift; echo $echo_n "$@$echo_c";; 238 *) echo "$@";; 239 esac 240} 241 242# for systems that deprecate egrep 243case "`echo egrep | egrep 'e|g' 2>&1`" in 244egrep) ;; 245*) egrep() { grep -E "$@"; };; 246esac 247 248export HOSTNAME HOST 249export OS MACHINE MACHINE_ARCH OSREL OSMAJOR LOCAL_FS TMP_DIRS MAILER N C K PS_AXC 250export LN SHARE_ARCH TR 251export LOCALBASE 252 253case /$0 in 254*/os.sh) 255 for v in $* 256 do 257 eval vv=\$$v 258 echo "$v='$vv'" 259 done 260 ;; 261*/host_target32) echo $HOST_TARGET32;; 262*/host_target) echo $HOST_TARGET;; 263esac 264 265