xref: /dragonfly/contrib/bmake/os.sh (revision 6eef5f0c)
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