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