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.46 2014/05/19 16:38:09 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 47*[!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 OSREL="$OSMAJOR.`uname -r`" 85 LOCAL_FS=jfs 86 PS_AXC=-e 87 SHARE_ARCH=$OS/$OSMAJOR.X 88 ;; 89SunOS) 90 CHOWN=`Which chown /usr/etc:/usr/bin` 91 export CHOWN 92 93 # Great! Solaris keeps moving arch(1) 94 # should just bite the bullet and use uname -p 95 arch=`Which arch /usr/bin:/usr/ucb` 96 97 MAILER=/usr/ucb/Mail 98 LOCAL_FS=4.2 99 100 case "$OSREL" in 101 4.0*) 102 # uname -m just says sun which could be anything 103 # so use arch(1). 104 MACHINE_ARCH=`arch` 105 MACHINE=$MACHINE_ARCH 106 ;; 107 4*) 108 MACHINE_ARCH=`arch` 109 ;; 110 5*) 111 K=-k 112 LOCAL_FS=ufs 113 MAILER=mailx 114 PS_AXC=-e 115 # can you believe that ln on Solaris defaults to 116 # overwriting an existing file!!!!! We want one that works! 117 test -x /usr/xpg4/bin/ln && LN=${LN:-/usr/xpg4/bin/ln} 118 # wonderful, 5.8's tr again require's []'s 119 # but /usr/xpg4/bin/tr causes problems if LC_COLLATE is set! 120 # use toUpper/toLower instead. 121 ;; 122 esac 123 case "$OS/$MACHINE_ARCH" in 124 *sun386) SHARE_ARCH=$MACHINE_ARCH;; 125 esac 126 ;; 127*BSD) 128 K=-k 129 MAILER=/usr/bin/Mail 130 LOCAL_FS=local 131 : $-,$ENV 132 case "$-,$ENV" in 133 *i*,*) ;; 134 *,|*ENVFILE*) ;; 135 *) ENV=;; 136 esac 137 # NetBSD at least has good backward compatibility 138 # so NetBSD/i386 is good enough 139 case $OS in 140 NetBSD) SHARE_ARCH=$OS/${MACHINE_ARCH:-$MACHINE};; 141 OpenBSD) 142 arch=`Which arch /usr/bin:/usr/ucb:$PATH` 143 MACHINE_ARCH=`$arch -s` 144 ;; 145 esac 146 NAWK=awk 147 export NAWK 148 ;; 149HP-UX) 150 TMP_DIRS="/tmp /usr/tmp" 151 LOCAL_FS=hfs 152 MAILER=mailx 153 # don't rely on /bin/sh, its broken 154 _shell=/bin/ksh; ENV= 155 # also, no one would be interested in OSMAJOR=A 156 case "$OSREL" in 157 ?.09*) OSMAJOR=9; PS_AXC=-e;; 158 ?.10*) OSMAJOR=10; PS_AXC=-e;; 159 esac 160 ;; 161IRIX) 162 LOCAL_FS=efs 163 ;; 164Interix) 165 MACHINE=i386 166 MACHINE_ARCH=i386 167 ;; 168UnixWare) 169 OSREL=`uname -v` 170 OSMAJOR=`IFS=.; set $OSREL; echo $1` 171 MACHINE_ARCH=`uname -m` 172 ;; 173Linux) 174 # Not really any such thing as Linux, but 175 # this covers red-hat and hopefully others. 176 case $MACHINE in 177 i?86) MACHINE_ARCH=i386;; # we don't care about i686 vs i586 178 esac 179 LOCAL_FS=ext2 180 PS_AXC=axc 181 [ -x /usr/bin/md5sum ] && { MD5=/usr/bin/md5sum; export MD5; } 182 ;; 183QNX) 184 case $MACHINE in 185 x86pc) MACHINE_ARCH=i386;; 186 esac 187 ;; 188Haiku) 189 case $MACHINE in 190 BeBox) MACHINE_ARCH=powerpc;; 191 BeMac) MACHINE_ARCH=powerpc;; 192 BePC) MACHINE_ARCH=i386;; 193 esac 194 ;; 195esac 196 197HOSTNAME=${HOSTNAME:-`( hostname ) 2>/dev/null`} 198HOSTNAME=${HOSTNAME:-`( uname -n ) 2>/dev/null`} 199case "$HOSTNAME" in 200*.*) HOST=`IFS=.; set -- $HOSTNAME; echo $1`;; 201*) HOST=$HOSTNAME;; 202esac 203 204TMP_DIRS=${TMP_DIRS:-"/tmp /var/tmp"} 205MACHINE_ARCH=${MACHINE_ARCH:-$MACHINE} 206# we mount server:/share/arch/$SHARE_ARCH as /usr/local 207SHARE_ARCH=${SHARE_ARCH:-$OS/$OSMAJOR.X/$MACHINE_ARCH} 208LN=${LN:-ln} 209TR=${TR:-tr} 210 211# Some people like have /share/$HOST_TARGET/bin etc. 212HOST_TARGET=`echo ${OS}${OSMAJOR}-${MACHINE_ARCH} | toLower` 213export HOST_TARGET 214 215case `echo -n .` in -n*) N=; C="\c";; *) N=-n; C=;; esac 216 217export HOSTNAME HOST 218export OS MACHINE MACHINE_ARCH OSREL OSMAJOR LOCAL_FS TMP_DIRS MAILER N C K PS_AXC 219export LN SHARE_ARCH TR 220 221case /$0 in 222*/os.sh) 223 for v in $* 224 do 225 eval vv=\$$v 226 echo "$v='$vv'" 227 done 228 ;; 229esac 230 231