xref: /freebsd/contrib/bmake/os.sh (revision d9a65c5de1c9f30ae71ce0be8fb88be9d20d216d)
13955d011SMarcel Moolenaar:
23955d011SMarcel Moolenaar# NAME:
33955d011SMarcel Moolenaar#	os.sh - operating system specifics
43955d011SMarcel Moolenaar#
53955d011SMarcel Moolenaar# DESCRIPTION:
63955d011SMarcel Moolenaar#	This file is included at the start of processing. Its role is
73955d011SMarcel Moolenaar#	to set the variables OS, OSREL, OSMAJOR, MACHINE and MACHINE_ARCH to
83955d011SMarcel Moolenaar#	reflect the current system.
93955d011SMarcel Moolenaar#
103955d011SMarcel Moolenaar#	It also sets variables such as MAILER, LOCAL_FS, PS_AXC to hide
113955d011SMarcel Moolenaar#	certain aspects of different UNIX flavours.
123955d011SMarcel Moolenaar#
133955d011SMarcel Moolenaar# SEE ALSO:
143955d011SMarcel Moolenaar#	site.sh,funcs.sh
153955d011SMarcel Moolenaar#
163955d011SMarcel Moolenaar# AUTHOR:
173955d011SMarcel Moolenaar#	Simon J. Gerraty <sjg@crufty.net>
183955d011SMarcel Moolenaar
193955d011SMarcel Moolenaar# RCSid:
20*d9a65c5dSSimon J. Gerraty#	$Id: os.sh,v 1.67 2025/02/13 21:04:34 sjg Exp $
213955d011SMarcel Moolenaar#
223955d011SMarcel Moolenaar#	@(#) Copyright (c) 1994 Simon J. Gerraty
233955d011SMarcel Moolenaar#
243955d011SMarcel Moolenaar#	This file is provided in the hope that it will
253955d011SMarcel Moolenaar#	be of use.  There is absolutely NO WARRANTY.
263955d011SMarcel Moolenaar#	Permission to copy, redistribute or otherwise
273955d011SMarcel Moolenaar#	use this file is hereby granted provided that
283955d011SMarcel Moolenaar#	the above copyright notice and this notice are
293955d011SMarcel Moolenaar#	left intact.
303955d011SMarcel Moolenaar#
313955d011SMarcel Moolenaar#	Please send copies of changes and bug-fixes to:
323955d011SMarcel Moolenaar#	sjg@crufty.net
333955d011SMarcel Moolenaar#
343955d011SMarcel Moolenaar
353955d011SMarcel Moolenaar# this lets us skip sourcing it again
363955d011SMarcel Moolenaar_OS_SH=:
373955d011SMarcel Moolenaar
383955d011SMarcel MoolenaarOS=`uname`
393955d011SMarcel MoolenaarOSREL=`uname -r`
403955d011SMarcel MoolenaarOSMAJOR=`IFS=.; set $OSREL; echo $1`
41*d9a65c5dSSimon J. Gerraty# we want to retain the raw output from uname -m and -p
42*d9a65c5dSSimon J. GerratyOS_MACHINE=`uname -m`
43*d9a65c5dSSimon J. GerratyOS_MACHINE_ARCH=`uname -p 2>/dev/null || echo $OS_MACHINE`
44*d9a65c5dSSimon J. Gerraty
45*d9a65c5dSSimon J. GerratyMACHINE=$OS_MACHINE
46*d9a65c5dSSimon J. GerratyMACHINE_ARCH=$OS_MACHINE_ARCH
473955d011SMarcel Moolenaar
48148ee845SSimon J. Gerraty# there is at least one case of `uname -p`
49148ee845SSimon J. Gerraty# and even `uname -m` outputting usless info
50148ee845SSimon J. Gerraty# fortunately not both together
51148ee845SSimon J. Gerratycase "$MACHINE" in
52148ee845SSimon J. Gerraty*[!A-Za-z0-9_-]*) MACHINE="$MACHINE_ARCH";;
53148ee845SSimon J. Gerratyesac
543955d011SMarcel Moolenaarcase "$MACHINE_ARCH" in
55ac3446e9SSimon J. Gerratyunknown|*[!A-Za-z0-9_-]*) MACHINE_ARCH="$MACHINE";;
563955d011SMarcel Moolenaaresac
573955d011SMarcel Moolenaar
583955d011SMarcel Moolenaar# we need this here, and it is not always available...
593955d011SMarcel MoolenaarWhich() {
603955d011SMarcel Moolenaar	case "$1" in
613955d011SMarcel Moolenaar	-*) t=$1; shift;;
623955d011SMarcel Moolenaar	*) t=-x;;
633955d011SMarcel Moolenaar	esac
643955d011SMarcel Moolenaar	case "$1" in
653955d011SMarcel Moolenaar	/*)	test $t $1 && echo $1;;
663955d011SMarcel Moolenaar	*)
673955d011SMarcel Moolenaar		# some shells cannot correctly handle `IFS`
683955d011SMarcel Moolenaar		# in conjunction with the for loop.
693955d011SMarcel Moolenaar		_dirs=`IFS=:; echo ${2:-$PATH}`
703955d011SMarcel Moolenaar		for d in $_dirs
713955d011SMarcel Moolenaar		do
723955d011SMarcel Moolenaar			test $t $d/$1 && { echo $d/$1; break; }
733955d011SMarcel Moolenaar		done
743955d011SMarcel Moolenaar		;;
753955d011SMarcel Moolenaar	esac
763955d011SMarcel Moolenaar}
773955d011SMarcel Moolenaar
783955d011SMarcel Moolenaar# tr is insanely non-portable wrt char classes, so we need to
793955d011SMarcel Moolenaar# spell out the alphabet. sed y/// would work too.
803955d011SMarcel MoolenaartoUpper() {
813955d011SMarcel Moolenaar	${TR:-tr} abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ
823955d011SMarcel Moolenaar}
833955d011SMarcel Moolenaar
843955d011SMarcel MoolenaartoLower() {
853955d011SMarcel Moolenaar	${TR:-tr} ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz
863955d011SMarcel Moolenaar}
873955d011SMarcel Moolenaar
883955d011SMarcel MoolenaarK=
894fde40d9SSimon J. Gerratycase "$OS" in
903955d011SMarcel MoolenaarAIX)	# everyone loves to be different...
913955d011SMarcel Moolenaar	OSMAJOR=`uname -v`
924fde40d9SSimon J. Gerraty	OSMINOR=`uname -r`
934fde40d9SSimon J. Gerraty	OSREL="$OSMAJOR.$OSMINOR"
943955d011SMarcel Moolenaar	LOCAL_FS=jfs
953955d011SMarcel Moolenaar	PS_AXC=-e
963955d011SMarcel Moolenaar	SHARE_ARCH=$OS/$OSMAJOR.X
973955d011SMarcel Moolenaar	;;
98548bfc56SSimon J. GerratyCYGWIN*) # uname -s not very useful
99548bfc56SSimon J. Gerraty        # uname -o produces just Cygwin which is better
100548bfc56SSimon J. Gerraty        OS=Cygwin
101548bfc56SSimon J. Gerraty        ;;
102148ee845SSimon J. GerratyDarwin) # this is more explicit (arm64 vs arm)
1032c3632d1SSimon J. Gerraty        HOST_ARCH=$MACHINE
1042c3632d1SSimon J. Gerraty        ;;
1053955d011SMarcel MoolenaarSunOS)
1063955d011SMarcel Moolenaar	CHOWN=`Which chown /usr/etc:/usr/bin`
1073955d011SMarcel Moolenaar	export CHOWN
1083955d011SMarcel Moolenaar
1093955d011SMarcel Moolenaar	# Great! Solaris keeps moving arch(1)
1103955d011SMarcel Moolenaar	# should just bite the bullet and use uname -p
1113955d011SMarcel Moolenaar	arch=`Which arch /usr/bin:/usr/ucb`
1123955d011SMarcel Moolenaar
1133955d011SMarcel Moolenaar	MAILER=/usr/ucb/Mail
1143955d011SMarcel Moolenaar	LOCAL_FS=4.2
1153955d011SMarcel Moolenaar
1163955d011SMarcel Moolenaar	case "$OSREL" in
1173955d011SMarcel Moolenaar	4.0*)
1183955d011SMarcel Moolenaar		# uname -m just says sun which could be anything
1193955d011SMarcel Moolenaar		# so use arch(1).
1203955d011SMarcel Moolenaar		MACHINE_ARCH=`arch`
1213955d011SMarcel Moolenaar		MACHINE=$MACHINE_ARCH
1223955d011SMarcel Moolenaar		;;
1233955d011SMarcel Moolenaar	4*)
1243955d011SMarcel Moolenaar		MACHINE_ARCH=`arch`
1253955d011SMarcel Moolenaar		;;
1263955d011SMarcel Moolenaar	5*)
1273955d011SMarcel Moolenaar		K=-k
1283955d011SMarcel Moolenaar		LOCAL_FS=ufs
1293955d011SMarcel Moolenaar		MAILER=mailx
1303955d011SMarcel Moolenaar		PS_AXC=-e
1313955d011SMarcel Moolenaar		# can you believe that ln on Solaris defaults to
1323955d011SMarcel Moolenaar		# overwriting an existing file!!!!! We want one that works!
1333955d011SMarcel Moolenaar		test -x /usr/xpg4/bin/ln && LN=${LN:-/usr/xpg4/bin/ln}
1343955d011SMarcel Moolenaar		# wonderful, 5.8's tr again require's []'s
1353955d011SMarcel Moolenaar		# but /usr/xpg4/bin/tr causes problems if LC_COLLATE is set!
1363955d011SMarcel Moolenaar		# use toUpper/toLower instead.
1373955d011SMarcel Moolenaar		;;
1383955d011SMarcel Moolenaar	esac
1393955d011SMarcel Moolenaar	case "$OS/$MACHINE_ARCH" in
1403955d011SMarcel Moolenaar	*sun386)	SHARE_ARCH=$MACHINE_ARCH;;
1413955d011SMarcel Moolenaar	esac
1423955d011SMarcel Moolenaar	;;
1433955d011SMarcel Moolenaar*BSD)
1443955d011SMarcel Moolenaar	K=-k
1453955d011SMarcel Moolenaar	MAILER=/usr/bin/Mail
1463955d011SMarcel Moolenaar	LOCAL_FS=local
1475bcb7424SSimon J. Gerraty	: $-,$ENV
1485bcb7424SSimon J. Gerraty	case "$-,$ENV" in
1495bcb7424SSimon J. Gerraty	*i*,*) ;;
1505bcb7424SSimon J. Gerraty	*,|*ENVFILE*) ;;
1513955d011SMarcel Moolenaar	*) ENV=;;
1523955d011SMarcel Moolenaar	esac
1535bcb7424SSimon J. Gerraty	# NetBSD at least has good backward compatibility
1543955d011SMarcel Moolenaar	# so NetBSD/i386 is good enough
155148ee845SSimon J. Gerraty        # recent NetBSD uses x86_64 for MACHINE_ARCH
1563955d011SMarcel Moolenaar	case $OS in
1574c620fe5SSimon J. Gerraty	NetBSD)
15850d2e745SSimon J. Gerraty	        LOCALBASE=/usr/pkg
15995e3ed2cSSimon J. Gerraty		SHARE_ARCH=$OS/$HOST_ARCH
1604c620fe5SSimon J. Gerraty		;;
1613955d011SMarcel Moolenaar	OpenBSD)
1623955d011SMarcel Moolenaar		arch=`Which arch /usr/bin:/usr/ucb:$PATH`
1633955d011SMarcel Moolenaar		MACHINE_ARCH=`$arch -s`
1643955d011SMarcel Moolenaar		;;
1653955d011SMarcel Moolenaar	esac
1663955d011SMarcel Moolenaar	NAWK=awk
1673955d011SMarcel Moolenaar	export NAWK
1683955d011SMarcel Moolenaar	;;
1693955d011SMarcel MoolenaarHP-UX)
1703955d011SMarcel Moolenaar	TMP_DIRS="/tmp /usr/tmp"
1713955d011SMarcel Moolenaar	LOCAL_FS=hfs
1723955d011SMarcel Moolenaar	MAILER=mailx
1733955d011SMarcel Moolenaar	# don't rely on /bin/sh, its broken
1743955d011SMarcel Moolenaar	_shell=/bin/ksh; ENV=
1753955d011SMarcel Moolenaar	# also, no one would be interested in OSMAJOR=A
1763955d011SMarcel Moolenaar	case "$OSREL" in
1773955d011SMarcel Moolenaar	?.09*)	OSMAJOR=9; PS_AXC=-e;;
1783955d011SMarcel Moolenaar	?.10*)	OSMAJOR=10; PS_AXC=-e;;
1793955d011SMarcel Moolenaar	esac
1803955d011SMarcel Moolenaar	;;
1813955d011SMarcel MoolenaarIRIX)
1823955d011SMarcel Moolenaar	LOCAL_FS=efs
1833955d011SMarcel Moolenaar	;;
1843955d011SMarcel MoolenaarInterix)
1853955d011SMarcel Moolenaar	MACHINE=i386
1863955d011SMarcel Moolenaar	MACHINE_ARCH=i386
1873955d011SMarcel Moolenaar	;;
18812904384SSimon J. GerratyUnixWare|SCO_SV)
1893955d011SMarcel Moolenaar	OSREL=`uname -v`
1903955d011SMarcel Moolenaar	OSMAJOR=`IFS=.; set $OSREL; echo $1`
1913955d011SMarcel Moolenaar	MACHINE_ARCH=`uname -m`
1923955d011SMarcel Moolenaar	;;
1933955d011SMarcel MoolenaarLinux)
1943955d011SMarcel Moolenaar	# Not really any such thing as Linux, but
1953955d011SMarcel Moolenaar	# this covers red-hat and hopefully others.
1963955d011SMarcel Moolenaar	case $MACHINE in
1973955d011SMarcel Moolenaar	i?86)	MACHINE_ARCH=i386;; # we don't care about i686 vs i586
1983955d011SMarcel Moolenaar	esac
1993955d011SMarcel Moolenaar	LOCAL_FS=ext2
2003955d011SMarcel Moolenaar	PS_AXC=axc
2013955d011SMarcel Moolenaar	[ -x /usr/bin/md5sum ] && { MD5=/usr/bin/md5sum; export MD5; }
2023955d011SMarcel Moolenaar	;;
2033955d011SMarcel MoolenaarQNX)
2043955d011SMarcel Moolenaar	case $MACHINE in
2053955d011SMarcel Moolenaar	x86pc)	MACHINE_ARCH=i386;;
2063955d011SMarcel Moolenaar	esac
2073955d011SMarcel Moolenaar	;;
2083955d011SMarcel MoolenaarHaiku)
2093955d011SMarcel Moolenaar	case $MACHINE in
2103955d011SMarcel Moolenaar	BeBox)	MACHINE_ARCH=powerpc;;
2113955d011SMarcel Moolenaar	BeMac)	MACHINE_ARCH=powerpc;;
2123955d011SMarcel Moolenaar	BePC)	MACHINE_ARCH=i386;;
2133955d011SMarcel Moolenaar	esac
2143955d011SMarcel Moolenaar	;;
2153955d011SMarcel Moolenaaresac
21650d2e745SSimon J. GerratyLOCALBASE=${LOCALBASE:-/usr/local}
2173955d011SMarcel Moolenaar
2183955d011SMarcel MoolenaarHOSTNAME=${HOSTNAME:-`( hostname ) 2>/dev/null`}
2193955d011SMarcel MoolenaarHOSTNAME=${HOSTNAME:-`( uname -n ) 2>/dev/null`}
2203955d011SMarcel Moolenaarcase "$HOSTNAME" in
2213955d011SMarcel Moolenaar*.*)	HOST=`IFS=.; set -- $HOSTNAME; echo $1`;;
2223955d011SMarcel Moolenaar*)	HOST=$HOSTNAME;;
2233955d011SMarcel Moolenaaresac
2243955d011SMarcel Moolenaar
2253955d011SMarcel MoolenaarTMP_DIRS=${TMP_DIRS:-"/tmp /var/tmp"}
2263955d011SMarcel MoolenaarMACHINE_ARCH=${MACHINE_ARCH:-$MACHINE}
2272c3632d1SSimon J. GerratyHOST_ARCH=${HOST_ARCH:-$MACHINE_ARCH}
2282c3632d1SSimon J. Gerratycase "$HOST_ARCH" in
2291ce939a7SSimon J. Gerratyx86*64|amd64) MACHINE32_ARCH=i386;;
2306a7405f5SSimon J. Gerraty*64) MACHINE32_ARCH=${MACHINE32_ARCH:-`echo $MACHINE_ARCH | sed 's,64,32,'`};;
2311ce939a7SSimon J. Gerraty*) MACHINE32_ARCH=$MACHINE_ARCH;;
2321ce939a7SSimon J. Gerratyesac
2331ce939a7SSimon J. GerratyHOST_ARCH32=${HOST_ARCH32:-$MACHINE32_ARCH}
2346a7405f5SSimon J. Gerratyexport HOST_ARCH HOST_ARCH32
2353955d011SMarcel Moolenaar# we mount server:/share/arch/$SHARE_ARCH as /usr/local
23695e3ed2cSSimon J. GerratySHARE_ARCH_DEFAULT=$OS/$OSMAJOR.X/$HOST_ARCH
23795e3ed2cSSimon J. GerratySHARE_ARCH=${SHARE_ARCH:-$SHARE_ARCH_DEFAULT}
2383955d011SMarcel MoolenaarLN=${LN:-ln}
2393955d011SMarcel MoolenaarTR=${TR:-tr}
2403955d011SMarcel Moolenaar
2413955d011SMarcel Moolenaar# Some people like have /share/$HOST_TARGET/bin etc.
242ac3446e9SSimon J. GerratyHOST_TARGET=`echo ${OS}${OSMAJOR}-$HOST_ARCH | tr -d / | toLower`
2431ce939a7SSimon J. GerratyHOST_TARGET32=`echo ${OS}${OSMAJOR}-$HOST_ARCH32 | tr -d / | toLower`
2441ce939a7SSimon J. Gerratyexport HOST_TARGET HOST_TARGET32
2453955d011SMarcel Moolenaar
2466a7405f5SSimon J. Gerratycase `echo -e .` in -e*) echo_e=;; *) echo_e=-e;; esac
2474fde40d9SSimon J. Gerratycase `echo -n .` in -n*) echo_n=; echo_c="\c";; *) echo_n=-n; echo_c=;; esac
2483955d011SMarcel Moolenaar
2496e050540SSimon J. GerratyEcho() {
2506e050540SSimon J. Gerraty	case "$1" in
2516a7405f5SSimon J. Gerraty	-e) shift; echo $echo_e "$@";;
2524fde40d9SSimon J. Gerraty	-n) shift; echo $echo_n "$@$echo_c";;
2534fde40d9SSimon J. Gerraty	*)  echo "$@";;
2546e050540SSimon J. Gerraty	esac
2556e050540SSimon J. Gerraty}
2566e050540SSimon J. Gerraty
2574fde40d9SSimon J. Gerraty# for systems that deprecate egrep
2584fde40d9SSimon J. Gerratycase "`echo egrep | egrep 'e|g' 2>&1`" in
2594fde40d9SSimon J. Gerratyegrep) ;;
2604fde40d9SSimon J. Gerraty*) egrep() { grep -E "$@"; };;
2614fde40d9SSimon J. Gerratyesac
2624fde40d9SSimon J. Gerraty
2633955d011SMarcel Moolenaarexport HOSTNAME HOST
2643955d011SMarcel Moolenaarexport OS MACHINE MACHINE_ARCH OSREL OSMAJOR LOCAL_FS TMP_DIRS MAILER N C K PS_AXC
2653955d011SMarcel Moolenaarexport LN SHARE_ARCH TR
26650d2e745SSimon J. Gerratyexport LOCALBASE
2673955d011SMarcel Moolenaar
2683955d011SMarcel Moolenaarcase /$0 in
2693955d011SMarcel Moolenaar*/os.sh)
2703955d011SMarcel Moolenaar	for v in $*
2713955d011SMarcel Moolenaar	do
2723955d011SMarcel Moolenaar		eval vv=\$$v
2733955d011SMarcel Moolenaar		echo "$v='$vv'"
2743955d011SMarcel Moolenaar	done
2753955d011SMarcel Moolenaar	;;
276e22fef7dSSimon J. Gerraty*/host_target32) echo $HOST_TARGET32;;
277e22fef7dSSimon J. Gerraty*/host_target) echo $HOST_TARGET;;
2783955d011SMarcel Moolenaaresac
279