1236769Sobrien: 2236769Sobrien# NAME: 3236769Sobrien# os.sh - operating system specifics 4236769Sobrien# 5236769Sobrien# DESCRIPTION: 6236769Sobrien# This file is included at the start of processing. Its role is 7236769Sobrien# to set the variables OS, OSREL, OSMAJOR, MACHINE and MACHINE_ARCH to 8236769Sobrien# reflect the current system. 9236769Sobrien# 10236769Sobrien# It also sets variables such as MAILER, LOCAL_FS, PS_AXC to hide 11236769Sobrien# certain aspects of different UNIX flavours. 12236769Sobrien# 13236769Sobrien# SEE ALSO: 14236769Sobrien# site.sh,funcs.sh 15236769Sobrien# 16236769Sobrien# AUTHOR: 17236769Sobrien# Simon J. Gerraty <sjg@crufty.net> 18236769Sobrien 19236769Sobrien# RCSid: 20331246Ssjg# $Id: os.sh,v 1.55 2017/12/11 20:31:41 sjg Exp $ 21236769Sobrien# 22236769Sobrien# @(#) Copyright (c) 1994 Simon J. Gerraty 23236769Sobrien# 24236769Sobrien# This file is provided in the hope that it will 25236769Sobrien# be of use. There is absolutely NO WARRANTY. 26236769Sobrien# Permission to copy, redistribute or otherwise 27236769Sobrien# use this file is hereby granted provided that 28236769Sobrien# the above copyright notice and this notice are 29236769Sobrien# left intact. 30236769Sobrien# 31236769Sobrien# Please send copies of changes and bug-fixes to: 32236769Sobrien# sjg@crufty.net 33236769Sobrien# 34236769Sobrien 35236769Sobrien# this lets us skip sourcing it again 36236769Sobrien_OS_SH=: 37236769Sobrien 38236769SobrienOS=`uname` 39236769SobrienOSREL=`uname -r` 40236769SobrienOSMAJOR=`IFS=.; set $OSREL; echo $1` 41236769SobrienMACHINE=`uname -m` 42236769SobrienMACHINE_ARCH=`uname -p 2>/dev/null || echo $MACHINE` 43236769Sobrien 44236769Sobrien# there is at least one case of `uname -p` outputting 45236769Sobrien# a bunch of usless drivel 46236769Sobriencase "$MACHINE_ARCH" in 47291978Ssjgunknown|*[!A-Za-z0-9_-]*) MACHINE_ARCH="$MACHINE";; 48236769Sobrienesac 49236769Sobrien 50236769Sobrien# we need this here, and it is not always available... 51236769SobrienWhich() { 52236769Sobrien case "$1" in 53236769Sobrien -*) t=$1; shift;; 54236769Sobrien *) t=-x;; 55236769Sobrien esac 56236769Sobrien case "$1" in 57236769Sobrien /*) test $t $1 && echo $1;; 58236769Sobrien *) 59292733Ssjg # some shells cannot correctly handle `IFS` 60292733Ssjg # in conjunction with the for loop. 61292733Ssjg _dirs=`IFS=:; echo ${2:-$PATH}` 62292733Ssjg for d in $_dirs 63236769Sobrien do 64236769Sobrien test $t $d/$1 && { echo $d/$1; break; } 65236769Sobrien done 66236769Sobrien ;; 67236769Sobrien esac 68236769Sobrien} 69236769Sobrien 70236769Sobrien# tr is insanely non-portable wrt char classes, so we need to 71236769Sobrien# spell out the alphabet. sed y/// would work too. 72236769SobrientoUpper() { 73292733Ssjg ${TR:-tr} abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ 74236769Sobrien} 75236769Sobrien 76236769SobrientoLower() { 77292733Ssjg ${TR:-tr} ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz 78236769Sobrien} 79236769Sobrien 80236769SobrienK= 81236769Sobriencase $OS in 82236769SobrienAIX) # everyone loves to be different... 83236769Sobrien OSMAJOR=`uname -v` 84236769Sobrien OSREL="$OSMAJOR.`uname -r`" 85236769Sobrien LOCAL_FS=jfs 86236769Sobrien PS_AXC=-e 87236769Sobrien SHARE_ARCH=$OS/$OSMAJOR.X 88236769Sobrien ;; 89236769SobrienSunOS) 90236769Sobrien CHOWN=`Which chown /usr/etc:/usr/bin` 91236769Sobrien export CHOWN 92236769Sobrien 93236769Sobrien # Great! Solaris keeps moving arch(1) 94292733Ssjg # should just bite the bullet and use uname -p 95236769Sobrien arch=`Which arch /usr/bin:/usr/ucb` 96236769Sobrien 97236769Sobrien MAILER=/usr/ucb/Mail 98236769Sobrien LOCAL_FS=4.2 99236769Sobrien 100236769Sobrien case "$OSREL" in 101236769Sobrien 4.0*) 102236769Sobrien # uname -m just says sun which could be anything 103236769Sobrien # so use arch(1). 104236769Sobrien MACHINE_ARCH=`arch` 105236769Sobrien MACHINE=$MACHINE_ARCH 106236769Sobrien ;; 107236769Sobrien 4*) 108292733Ssjg MACHINE_ARCH=`arch` 109292733Ssjg ;; 110236769Sobrien 5*) 111236769Sobrien K=-k 112236769Sobrien LOCAL_FS=ufs 113236769Sobrien MAILER=mailx 114236769Sobrien PS_AXC=-e 115236769Sobrien # can you believe that ln on Solaris defaults to 116236769Sobrien # overwriting an existing file!!!!! We want one that works! 117236769Sobrien test -x /usr/xpg4/bin/ln && LN=${LN:-/usr/xpg4/bin/ln} 118236769Sobrien # wonderful, 5.8's tr again require's []'s 119292733Ssjg # but /usr/xpg4/bin/tr causes problems if LC_COLLATE is set! 120292733Ssjg # use toUpper/toLower instead. 121236769Sobrien ;; 122236769Sobrien esac 123236769Sobrien case "$OS/$MACHINE_ARCH" in 124236769Sobrien *sun386) SHARE_ARCH=$MACHINE_ARCH;; 125236769Sobrien esac 126236769Sobrien ;; 127236769Sobrien*BSD) 128236769Sobrien K=-k 129236769Sobrien MAILER=/usr/bin/Mail 130236769Sobrien LOCAL_FS=local 131268437Ssjg : $-,$ENV 132268437Ssjg case "$-,$ENV" in 133268437Ssjg *i*,*) ;; 134268437Ssjg *,|*ENVFILE*) ;; 135236769Sobrien *) ENV=;; 136236769Sobrien esac 137268437Ssjg # NetBSD at least has good backward compatibility 138236769Sobrien # so NetBSD/i386 is good enough 139236769Sobrien case $OS in 140289842Ssjg NetBSD) 141331246Ssjg LOCALBASE=/usr/pkg 142289842Ssjg HOST_ARCH=$MACHINE 143319884Ssjg SHARE_ARCH=$OS/$HOST_ARCH 144289842Ssjg ;; 145236769Sobrien OpenBSD) 146292733Ssjg arch=`Which arch /usr/bin:/usr/ucb:$PATH` 147292733Ssjg MACHINE_ARCH=`$arch -s` 148292733Ssjg ;; 149236769Sobrien esac 150236769Sobrien NAWK=awk 151236769Sobrien export NAWK 152236769Sobrien ;; 153236769SobrienHP-UX) 154236769Sobrien TMP_DIRS="/tmp /usr/tmp" 155236769Sobrien LOCAL_FS=hfs 156236769Sobrien MAILER=mailx 157236769Sobrien # don't rely on /bin/sh, its broken 158236769Sobrien _shell=/bin/ksh; ENV= 159236769Sobrien # also, no one would be interested in OSMAJOR=A 160236769Sobrien case "$OSREL" in 161236769Sobrien ?.09*) OSMAJOR=9; PS_AXC=-e;; 162236769Sobrien ?.10*) OSMAJOR=10; PS_AXC=-e;; 163236769Sobrien esac 164236769Sobrien ;; 165236769SobrienIRIX) 166236769Sobrien LOCAL_FS=efs 167236769Sobrien ;; 168236769SobrienInterix) 169236769Sobrien MACHINE=i386 170236769Sobrien MACHINE_ARCH=i386 171236769Sobrien ;; 172236769SobrienUnixWare) 173236769Sobrien OSREL=`uname -v` 174236769Sobrien OSMAJOR=`IFS=.; set $OSREL; echo $1` 175236769Sobrien MACHINE_ARCH=`uname -m` 176236769Sobrien ;; 177236769SobrienLinux) 178236769Sobrien # Not really any such thing as Linux, but 179236769Sobrien # this covers red-hat and hopefully others. 180236769Sobrien case $MACHINE in 181236769Sobrien i?86) MACHINE_ARCH=i386;; # we don't care about i686 vs i586 182236769Sobrien esac 183236769Sobrien LOCAL_FS=ext2 184236769Sobrien PS_AXC=axc 185236769Sobrien [ -x /usr/bin/md5sum ] && { MD5=/usr/bin/md5sum; export MD5; } 186236769Sobrien ;; 187236769SobrienQNX) 188236769Sobrien case $MACHINE in 189236769Sobrien x86pc) MACHINE_ARCH=i386;; 190236769Sobrien esac 191236769Sobrien ;; 192236769SobrienHaiku) 193236769Sobrien case $MACHINE in 194236769Sobrien BeBox) MACHINE_ARCH=powerpc;; 195236769Sobrien BeMac) MACHINE_ARCH=powerpc;; 196236769Sobrien BePC) MACHINE_ARCH=i386;; 197236769Sobrien esac 198236769Sobrien ;; 199236769Sobrienesac 200331246SsjgLOCALBASE=${LOCALBASE:-/usr/local} 201236769Sobrien 202236769SobrienHOSTNAME=${HOSTNAME:-`( hostname ) 2>/dev/null`} 203236769SobrienHOSTNAME=${HOSTNAME:-`( uname -n ) 2>/dev/null`} 204236769Sobriencase "$HOSTNAME" in 205236769Sobrien*.*) HOST=`IFS=.; set -- $HOSTNAME; echo $1`;; 206236769Sobrien*) HOST=$HOSTNAME;; 207236769Sobrienesac 208236769Sobrien 209236769SobrienTMP_DIRS=${TMP_DIRS:-"/tmp /var/tmp"} 210236769SobrienMACHINE_ARCH=${MACHINE_ARCH:-$MACHINE} 211319884Ssjgcase "$MACHINE_ARCH" in 212319884Ssjgx86*64|amd64) MACHINE32_ARCH=i386;; 213319884Ssjg*64) MACHINE32_ARCH=`echo $MACHINE_ARCH | sed 's,64,32,'`;; 214319884Ssjg*) MACHINE32_ARCH=$MACHINE_ARCH;; 215319884Ssjgesac 216289842SsjgHOST_ARCH=${HOST_ARCH:-$MACHINE_ARCH} 217319884SsjgHOST_ARCH32=${HOST_ARCH32:-$MACHINE32_ARCH} 218236769Sobrien# we mount server:/share/arch/$SHARE_ARCH as /usr/local 219319884SsjgSHARE_ARCH_DEFAULT=$OS/$OSMAJOR.X/$HOST_ARCH 220319884SsjgSHARE_ARCH=${SHARE_ARCH:-$SHARE_ARCH_DEFAULT} 221236769SobrienLN=${LN:-ln} 222236769SobrienTR=${TR:-tr} 223236769Sobrien 224236769Sobrien# Some people like have /share/$HOST_TARGET/bin etc. 225291978SsjgHOST_TARGET=`echo ${OS}${OSMAJOR}-$HOST_ARCH | tr -d / | toLower` 226319884SsjgHOST_TARGET32=`echo ${OS}${OSMAJOR}-$HOST_ARCH32 | tr -d / | toLower` 227319884Ssjgexport HOST_TARGET HOST_TARGET32 228236769Sobrien 229236769Sobriencase `echo -n .` in -n*) N=; C="\c";; *) N=-n; C=;; esac 230236769Sobrien 231292733SsjgEcho() { 232292733Ssjg case "$1" in 233292733Ssjg -n) _n=$N _c=$C; shift;; 234292733Ssjg *) _n= _c=;; 235292733Ssjg esac 236292733Ssjg echo $_n "$@" $_c 237292733Ssjg} 238292733Ssjg 239292733Ssjgexport HOSTNAME HOST 240236769Sobrienexport OS MACHINE MACHINE_ARCH OSREL OSMAJOR LOCAL_FS TMP_DIRS MAILER N C K PS_AXC 241236769Sobrienexport LN SHARE_ARCH TR 242331246Ssjgexport LOCALBASE 243236769Sobrien 244236769Sobriencase /$0 in 245236769Sobrien*/os.sh) 246292733Ssjg for v in $* 247236769Sobrien do 248292733Ssjg eval vv=\$$v 249292733Ssjg echo "$v='$vv'" 250236769Sobrien done 251292733Ssjg ;; 252331246Ssjg*/host_target32) echo $HOST_TARGET32;; 253331246Ssjg*/host_target) echo $HOST_TARGET;; 254236769Sobrienesac 255236769Sobrien 256