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