101e196c8SJohn Marino: 201e196c8SJohn Marino# NAME: 301e196c8SJohn Marino# os.sh - operating system specifics 401e196c8SJohn Marino# 501e196c8SJohn Marino# DESCRIPTION: 601e196c8SJohn Marino# This file is included at the start of processing. Its role is 701e196c8SJohn Marino# to set the variables OS, OSREL, OSMAJOR, MACHINE and MACHINE_ARCH to 801e196c8SJohn Marino# reflect the current system. 901e196c8SJohn Marino# 1001e196c8SJohn Marino# It also sets variables such as MAILER, LOCAL_FS, PS_AXC to hide 1101e196c8SJohn Marino# certain aspects of different UNIX flavours. 1201e196c8SJohn Marino# 1301e196c8SJohn Marino# SEE ALSO: 1401e196c8SJohn Marino# site.sh,funcs.sh 1501e196c8SJohn Marino# 1601e196c8SJohn Marino# AUTHOR: 1701e196c8SJohn Marino# Simon J. Gerraty <sjg@crufty.net> 1801e196c8SJohn Marino 1901e196c8SJohn Marino# RCSid: 20*6eef5f0cSAntonio Huete Jimenez# $Id: os.sh,v 1.61 2022/10/05 19:10:55 sjg Exp $ 2101e196c8SJohn Marino# 2201e196c8SJohn Marino# @(#) Copyright (c) 1994 Simon J. Gerraty 2301e196c8SJohn Marino# 2401e196c8SJohn Marino# This file is provided in the hope that it will 2501e196c8SJohn Marino# be of use. There is absolutely NO WARRANTY. 2601e196c8SJohn Marino# Permission to copy, redistribute or otherwise 2701e196c8SJohn Marino# use this file is hereby granted provided that 2801e196c8SJohn Marino# the above copyright notice and this notice are 2901e196c8SJohn Marino# left intact. 3001e196c8SJohn Marino# 3101e196c8SJohn Marino# Please send copies of changes and bug-fixes to: 3201e196c8SJohn Marino# sjg@crufty.net 3301e196c8SJohn Marino# 3401e196c8SJohn Marino 3501e196c8SJohn Marino# this lets us skip sourcing it again 3601e196c8SJohn Marino_OS_SH=: 3701e196c8SJohn Marino 3801e196c8SJohn MarinoOS=`uname` 3901e196c8SJohn MarinoOSREL=`uname -r` 4001e196c8SJohn MarinoOSMAJOR=`IFS=.; set $OSREL; echo $1` 4101e196c8SJohn MarinoMACHINE=`uname -m` 4201e196c8SJohn MarinoMACHINE_ARCH=`uname -p 2>/dev/null || echo $MACHINE` 4301e196c8SJohn Marino 4401e196c8SJohn Marino# there is at least one case of `uname -p` outputting 4501e196c8SJohn Marino# a bunch of usless drivel 4601e196c8SJohn Marinocase "$MACHINE_ARCH" in 47f445c897SJohn Marinounknown|*[!A-Za-z0-9_-]*) MACHINE_ARCH="$MACHINE";; 4801e196c8SJohn Marinoesac 4901e196c8SJohn Marino 5001e196c8SJohn Marino# we need this here, and it is not always available... 5101e196c8SJohn MarinoWhich() { 5201e196c8SJohn Marino case "$1" in 5301e196c8SJohn Marino -*) t=$1; shift;; 5401e196c8SJohn Marino *) t=-x;; 5501e196c8SJohn Marino esac 5601e196c8SJohn Marino case "$1" in 5701e196c8SJohn Marino /*) test $t $1 && echo $1;; 5801e196c8SJohn Marino *) 5901e196c8SJohn Marino # some shells cannot correctly handle `IFS` 6001e196c8SJohn Marino # in conjunction with the for loop. 6101e196c8SJohn Marino _dirs=`IFS=:; echo ${2:-$PATH}` 6201e196c8SJohn Marino for d in $_dirs 6301e196c8SJohn Marino do 6401e196c8SJohn Marino test $t $d/$1 && { echo $d/$1; break; } 6501e196c8SJohn Marino done 6601e196c8SJohn Marino ;; 6701e196c8SJohn Marino esac 6801e196c8SJohn Marino} 6901e196c8SJohn Marino 7001e196c8SJohn Marino# tr is insanely non-portable wrt char classes, so we need to 7101e196c8SJohn Marino# spell out the alphabet. sed y/// would work too. 7201e196c8SJohn MarinotoUpper() { 7301e196c8SJohn Marino ${TR:-tr} abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ 7401e196c8SJohn Marino} 7501e196c8SJohn Marino 7601e196c8SJohn MarinotoLower() { 7701e196c8SJohn Marino ${TR:-tr} ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz 7801e196c8SJohn Marino} 7901e196c8SJohn Marino 8001e196c8SJohn MarinoK= 8101e196c8SJohn Marinocase $OS in 8201e196c8SJohn MarinoAIX) # everyone loves to be different... 8301e196c8SJohn Marino OSMAJOR=`uname -v` 8401e196c8SJohn Marino OSREL="$OSMAJOR.`uname -r`" 8501e196c8SJohn Marino LOCAL_FS=jfs 8601e196c8SJohn Marino PS_AXC=-e 8701e196c8SJohn Marino SHARE_ARCH=$OS/$OSMAJOR.X 8801e196c8SJohn Marino ;; 89a34d5fb1SAntonio Huete JimenezDarwin) # a bit like BSD 90a34d5fb1SAntonio Huete Jimenez HOST_ARCH=$MACHINE 91a34d5fb1SAntonio Huete Jimenez ;; 9201e196c8SJohn MarinoSunOS) 9301e196c8SJohn Marino CHOWN=`Which chown /usr/etc:/usr/bin` 9401e196c8SJohn Marino export CHOWN 9501e196c8SJohn Marino 9601e196c8SJohn Marino # Great! Solaris keeps moving arch(1) 9701e196c8SJohn Marino # should just bite the bullet and use uname -p 9801e196c8SJohn Marino arch=`Which arch /usr/bin:/usr/ucb` 9901e196c8SJohn Marino 10001e196c8SJohn Marino MAILER=/usr/ucb/Mail 10101e196c8SJohn Marino LOCAL_FS=4.2 10201e196c8SJohn Marino 10301e196c8SJohn Marino case "$OSREL" in 10401e196c8SJohn Marino 4.0*) 10501e196c8SJohn Marino # uname -m just says sun which could be anything 10601e196c8SJohn Marino # so use arch(1). 10701e196c8SJohn Marino MACHINE_ARCH=`arch` 10801e196c8SJohn Marino MACHINE=$MACHINE_ARCH 10901e196c8SJohn Marino ;; 11001e196c8SJohn Marino 4*) 11101e196c8SJohn Marino MACHINE_ARCH=`arch` 11201e196c8SJohn Marino ;; 11301e196c8SJohn Marino 5*) 11401e196c8SJohn Marino K=-k 11501e196c8SJohn Marino LOCAL_FS=ufs 11601e196c8SJohn Marino MAILER=mailx 11701e196c8SJohn Marino PS_AXC=-e 11801e196c8SJohn Marino # can you believe that ln on Solaris defaults to 11901e196c8SJohn Marino # overwriting an existing file!!!!! We want one that works! 12001e196c8SJohn Marino test -x /usr/xpg4/bin/ln && LN=${LN:-/usr/xpg4/bin/ln} 12101e196c8SJohn Marino # wonderful, 5.8's tr again require's []'s 12201e196c8SJohn Marino # but /usr/xpg4/bin/tr causes problems if LC_COLLATE is set! 12301e196c8SJohn Marino # use toUpper/toLower instead. 12401e196c8SJohn Marino ;; 12501e196c8SJohn Marino esac 12601e196c8SJohn Marino case "$OS/$MACHINE_ARCH" in 12701e196c8SJohn Marino *sun386) SHARE_ARCH=$MACHINE_ARCH;; 12801e196c8SJohn Marino esac 12901e196c8SJohn Marino ;; 13001e196c8SJohn Marino*BSD) 13101e196c8SJohn Marino K=-k 13201e196c8SJohn Marino MAILER=/usr/bin/Mail 13301e196c8SJohn Marino LOCAL_FS=local 1346a91b982SJohn Marino : $-,$ENV 1356a91b982SJohn Marino case "$-,$ENV" in 1366a91b982SJohn Marino *i*,*) ;; 1376a91b982SJohn Marino *,|*ENVFILE*) ;; 13801e196c8SJohn Marino *) ENV=;; 13901e196c8SJohn Marino esac 1406a91b982SJohn Marino # NetBSD at least has good backward compatibility 14101e196c8SJohn Marino # so NetBSD/i386 is good enough 14201e196c8SJohn Marino case $OS in 143f445c897SJohn Marino NetBSD) 144ca58f742SDaniel Fojt LOCALBASE=/usr/pkg 145f445c897SJohn Marino HOST_ARCH=$MACHINE 146f445c897SJohn Marino SHARE_ARCH=$OS/$HOST_ARCH 147f445c897SJohn Marino ;; 14801e196c8SJohn Marino OpenBSD) 14901e196c8SJohn Marino arch=`Which arch /usr/bin:/usr/ucb:$PATH` 15001e196c8SJohn Marino MACHINE_ARCH=`$arch -s` 15101e196c8SJohn Marino ;; 15201e196c8SJohn Marino esac 15301e196c8SJohn Marino NAWK=awk 15401e196c8SJohn Marino export NAWK 15501e196c8SJohn Marino ;; 15601e196c8SJohn MarinoHP-UX) 15701e196c8SJohn Marino TMP_DIRS="/tmp /usr/tmp" 15801e196c8SJohn Marino LOCAL_FS=hfs 15901e196c8SJohn Marino MAILER=mailx 16001e196c8SJohn Marino # don't rely on /bin/sh, its broken 16101e196c8SJohn Marino _shell=/bin/ksh; ENV= 16201e196c8SJohn Marino # also, no one would be interested in OSMAJOR=A 16301e196c8SJohn Marino case "$OSREL" in 16401e196c8SJohn Marino ?.09*) OSMAJOR=9; PS_AXC=-e;; 16501e196c8SJohn Marino ?.10*) OSMAJOR=10; PS_AXC=-e;; 16601e196c8SJohn Marino esac 16701e196c8SJohn Marino ;; 16801e196c8SJohn MarinoIRIX) 16901e196c8SJohn Marino LOCAL_FS=efs 17001e196c8SJohn Marino ;; 17101e196c8SJohn MarinoInterix) 17201e196c8SJohn Marino MACHINE=i386 17301e196c8SJohn Marino MACHINE_ARCH=i386 17401e196c8SJohn Marino ;; 175*6eef5f0cSAntonio Huete JimenezUnixWare|SCO_SV) 17601e196c8SJohn Marino OSREL=`uname -v` 17701e196c8SJohn Marino OSMAJOR=`IFS=.; set $OSREL; echo $1` 17801e196c8SJohn Marino MACHINE_ARCH=`uname -m` 17901e196c8SJohn Marino ;; 18001e196c8SJohn MarinoLinux) 18101e196c8SJohn Marino # Not really any such thing as Linux, but 18201e196c8SJohn Marino # this covers red-hat and hopefully others. 18301e196c8SJohn Marino case $MACHINE in 18401e196c8SJohn Marino i?86) MACHINE_ARCH=i386;; # we don't care about i686 vs i586 18501e196c8SJohn Marino esac 18601e196c8SJohn Marino LOCAL_FS=ext2 18701e196c8SJohn Marino PS_AXC=axc 18801e196c8SJohn Marino [ -x /usr/bin/md5sum ] && { MD5=/usr/bin/md5sum; export MD5; } 18901e196c8SJohn Marino ;; 19001e196c8SJohn MarinoQNX) 19101e196c8SJohn Marino case $MACHINE in 19201e196c8SJohn Marino x86pc) MACHINE_ARCH=i386;; 19301e196c8SJohn Marino esac 19401e196c8SJohn Marino ;; 19501e196c8SJohn MarinoHaiku) 19601e196c8SJohn Marino case $MACHINE in 19701e196c8SJohn Marino BeBox) MACHINE_ARCH=powerpc;; 19801e196c8SJohn Marino BeMac) MACHINE_ARCH=powerpc;; 19901e196c8SJohn Marino BePC) MACHINE_ARCH=i386;; 20001e196c8SJohn Marino esac 20101e196c8SJohn Marino ;; 20201e196c8SJohn Marinoesac 203ca58f742SDaniel FojtLOCALBASE=${LOCALBASE:-/usr/local} 20401e196c8SJohn Marino 20501e196c8SJohn MarinoHOSTNAME=${HOSTNAME:-`( hostname ) 2>/dev/null`} 20601e196c8SJohn MarinoHOSTNAME=${HOSTNAME:-`( uname -n ) 2>/dev/null`} 20701e196c8SJohn Marinocase "$HOSTNAME" in 20801e196c8SJohn Marino*.*) HOST=`IFS=.; set -- $HOSTNAME; echo $1`;; 20901e196c8SJohn Marino*) HOST=$HOSTNAME;; 21001e196c8SJohn Marinoesac 21101e196c8SJohn Marino 21201e196c8SJohn MarinoTMP_DIRS=${TMP_DIRS:-"/tmp /var/tmp"} 21301e196c8SJohn MarinoMACHINE_ARCH=${MACHINE_ARCH:-$MACHINE} 214a34d5fb1SAntonio Huete JimenezHOST_ARCH=${HOST_ARCH:-$MACHINE_ARCH} 215a34d5fb1SAntonio Huete Jimenezcase "$HOST_ARCH" in 216ca58f742SDaniel Fojtx86*64|amd64) MACHINE32_ARCH=i386;; 217ca58f742SDaniel Fojt*64) MACHINE32_ARCH=`echo $MACHINE_ARCH | sed 's,64,32,'`;; 218ca58f742SDaniel Fojt*) MACHINE32_ARCH=$MACHINE_ARCH;; 219ca58f742SDaniel Fojtesac 220ca58f742SDaniel FojtHOST_ARCH32=${HOST_ARCH32:-$MACHINE32_ARCH} 22101e196c8SJohn Marino# we mount server:/share/arch/$SHARE_ARCH as /usr/local 222f445c897SJohn MarinoSHARE_ARCH_DEFAULT=$OS/$OSMAJOR.X/$HOST_ARCH 223f445c897SJohn MarinoSHARE_ARCH=${SHARE_ARCH:-$SHARE_ARCH_DEFAULT} 22401e196c8SJohn MarinoLN=${LN:-ln} 22501e196c8SJohn MarinoTR=${TR:-tr} 22601e196c8SJohn Marino 22701e196c8SJohn Marino# Some people like have /share/$HOST_TARGET/bin etc. 228f445c897SJohn MarinoHOST_TARGET=`echo ${OS}${OSMAJOR}-$HOST_ARCH | tr -d / | toLower` 229ca58f742SDaniel FojtHOST_TARGET32=`echo ${OS}${OSMAJOR}-$HOST_ARCH32 | tr -d / | toLower` 230ca58f742SDaniel Fojtexport HOST_TARGET HOST_TARGET32 23101e196c8SJohn Marino 232*6eef5f0cSAntonio Huete Jimenezcase `echo -n .` in -n*) echo_n=; echo_c="\c";; *) echo_n=-n; echo_c=;; esac 23301e196c8SJohn Marino 234f445c897SJohn MarinoEcho() { 235f445c897SJohn Marino case "$1" in 236*6eef5f0cSAntonio Huete Jimenez -n) shift; echo $echo_n "$@$echo_c";; 237*6eef5f0cSAntonio Huete Jimenez *) echo "$@";; 238f445c897SJohn Marino esac 239f445c897SJohn Marino} 240f445c897SJohn Marino 241*6eef5f0cSAntonio Huete Jimenez# for systems that deprecate egrep 242*6eef5f0cSAntonio Huete Jimenezcase "`echo egrep | egrep 'e|g' 2>&1`" in 243*6eef5f0cSAntonio Huete Jimenezegrep) ;; 244*6eef5f0cSAntonio Huete Jimenez*) egrep() { grep -E "$@"; };; 245*6eef5f0cSAntonio Huete Jimenezesac 246*6eef5f0cSAntonio Huete Jimenez 24701e196c8SJohn Marinoexport HOSTNAME HOST 24801e196c8SJohn Marinoexport OS MACHINE MACHINE_ARCH OSREL OSMAJOR LOCAL_FS TMP_DIRS MAILER N C K PS_AXC 24901e196c8SJohn Marinoexport LN SHARE_ARCH TR 250ca58f742SDaniel Fojtexport LOCALBASE 25101e196c8SJohn Marino 25201e196c8SJohn Marinocase /$0 in 25301e196c8SJohn Marino*/os.sh) 25401e196c8SJohn Marino for v in $* 25501e196c8SJohn Marino do 25601e196c8SJohn Marino eval vv=\$$v 25701e196c8SJohn Marino echo "$v='$vv'" 25801e196c8SJohn Marino done 25901e196c8SJohn Marino ;; 260ca58f742SDaniel Fojt*/host_target32) echo $HOST_TARGET32;; 261ca58f742SDaniel Fojt*/host_target) echo $HOST_TARGET;; 26201e196c8SJohn Marinoesac 26301e196c8SJohn Marino 264