Take II at unbreaking world
[dragonfly.git] / contrib / bmake / os.sh
blobb714eb782cec5453f023e444ad4159844409a96c
2 # NAME:
3 # os.sh - operating system specifics
5 # DESCRIPTION:
6 # This file is included at the start of processing. Its role is
7 # to set the variables OS, OSREL, OSMAJOR, MACHINE and MACHINE_ARCH to
8 # reflect the current system.
9 #
10 # It also sets variables such as MAILER, LOCAL_FS, PS_AXC to hide
11 # certain aspects of different UNIX flavours.
13 # SEE ALSO:
14 # site.sh,funcs.sh
16 # AUTHOR:
17 # Simon J. Gerraty <sjg@crufty.net>
19 # RCSid:
20 # $Id: os.sh,v 1.46 2014/05/19 16:38:09 sjg Exp $
22 # @(#) Copyright (c) 1994 Simon J. Gerraty
24 # This file is provided in the hope that it will
25 # be of use. There is absolutely NO WARRANTY.
26 # Permission to copy, redistribute or otherwise
27 # use this file is hereby granted provided that
28 # the above copyright notice and this notice are
29 # left intact.
31 # Please send copies of changes and bug-fixes to:
32 # sjg@crufty.net
35 # this lets us skip sourcing it again
36 _OS_SH=:
38 OS=`uname`
39 OSREL=`uname -r`
40 OSMAJOR=`IFS=.; set $OSREL; echo $1`
41 MACHINE=`uname -m`
42 MACHINE_ARCH=`uname -p 2>/dev/null || echo $MACHINE`
44 # there is at least one case of `uname -p` outputting
45 # a bunch of usless drivel
46 case "$MACHINE_ARCH" in
47 *[!A-Za-z0-9_-]*) MACHINE_ARCH="$MACHINE";;
48 esac
50 # we need this here, and it is not always available...
51 Which() {
52 case "$1" in
53 -*) t=$1; shift;;
54 *) t=-x;;
55 esac
56 case "$1" in
57 /*) test $t $1 && echo $1;;
59 # some shells cannot correctly handle `IFS`
60 # in conjunction with the for loop.
61 _dirs=`IFS=:; echo ${2:-$PATH}`
62 for d in $_dirs
64 test $t $d/$1 && { echo $d/$1; break; }
65 done
67 esac
70 # tr is insanely non-portable wrt char classes, so we need to
71 # spell out the alphabet. sed y/// would work too.
72 toUpper() {
73 ${TR:-tr} abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ
76 toLower() {
77 ${TR:-tr} ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz
81 case $OS in
82 AIX) # everyone loves to be different...
83 OSMAJOR=`uname -v`
84 OSREL="$OSMAJOR.`uname -r`"
85 LOCAL_FS=jfs
86 PS_AXC=-e
87 SHARE_ARCH=$OS/$OSMAJOR.X
89 SunOS)
90 CHOWN=`Which chown /usr/etc:/usr/bin`
91 export CHOWN
93 # Great! Solaris keeps moving arch(1)
94 # should just bite the bullet and use uname -p
95 arch=`Which arch /usr/bin:/usr/ucb`
97 MAILER=/usr/ucb/Mail
98 LOCAL_FS=4.2
100 case "$OSREL" in
101 4.0*)
102 # uname -m just says sun which could be anything
103 # so use arch(1).
104 MACHINE_ARCH=`arch`
105 MACHINE=$MACHINE_ARCH
108 MACHINE_ARCH=`arch`
111 K=-k
112 LOCAL_FS=ufs
113 MAILER=mailx
114 PS_AXC=-e
115 # can you believe that ln on Solaris defaults to
116 # overwriting an existing file!!!!! We want one that works!
117 test -x /usr/xpg4/bin/ln && LN=${LN:-/usr/xpg4/bin/ln}
118 # wonderful, 5.8's tr again require's []'s
119 # but /usr/xpg4/bin/tr causes problems if LC_COLLATE is set!
120 # use toUpper/toLower instead.
122 esac
123 case "$OS/$MACHINE_ARCH" in
124 *sun386) SHARE_ARCH=$MACHINE_ARCH;;
125 esac
127 *BSD)
128 K=-k
129 MAILER=/usr/bin/Mail
130 LOCAL_FS=local
131 : $-,$ENV
132 case "$-,$ENV" in
133 *i*,*) ;;
134 *,|*ENVFILE*) ;;
135 *) ENV=;;
136 esac
137 # NetBSD at least has good backward compatibility
138 # so NetBSD/i386 is good enough
139 case $OS in
140 NetBSD) SHARE_ARCH=$OS/${MACHINE_ARCH:-$MACHINE};;
141 OpenBSD)
142 arch=`Which arch /usr/bin:/usr/ucb:$PATH`
143 MACHINE_ARCH=`$arch -s`
145 esac
146 NAWK=awk
147 export NAWK
149 HP-UX)
150 TMP_DIRS="/tmp /usr/tmp"
151 LOCAL_FS=hfs
152 MAILER=mailx
153 # don't rely on /bin/sh, its broken
154 _shell=/bin/ksh; ENV=
155 # also, no one would be interested in OSMAJOR=A
156 case "$OSREL" in
157 ?.09*) OSMAJOR=9; PS_AXC=-e;;
158 ?.10*) OSMAJOR=10; PS_AXC=-e;;
159 esac
161 IRIX)
162 LOCAL_FS=efs
164 Interix)
165 MACHINE=i386
166 MACHINE_ARCH=i386
168 UnixWare)
169 OSREL=`uname -v`
170 OSMAJOR=`IFS=.; set $OSREL; echo $1`
171 MACHINE_ARCH=`uname -m`
173 Linux)
174 # Not really any such thing as Linux, but
175 # this covers red-hat and hopefully others.
176 case $MACHINE in
177 i?86) MACHINE_ARCH=i386;; # we don't care about i686 vs i586
178 esac
179 LOCAL_FS=ext2
180 PS_AXC=axc
181 [ -x /usr/bin/md5sum ] && { MD5=/usr/bin/md5sum; export MD5; }
183 QNX)
184 case $MACHINE in
185 x86pc) MACHINE_ARCH=i386;;
186 esac
188 Haiku)
189 case $MACHINE in
190 BeBox) MACHINE_ARCH=powerpc;;
191 BeMac) MACHINE_ARCH=powerpc;;
192 BePC) MACHINE_ARCH=i386;;
193 esac
195 esac
197 HOSTNAME=${HOSTNAME:-`( hostname ) 2>/dev/null`}
198 HOSTNAME=${HOSTNAME:-`( uname -n ) 2>/dev/null`}
199 case "$HOSTNAME" in
200 *.*) HOST=`IFS=.; set -- $HOSTNAME; echo $1`;;
201 *) HOST=$HOSTNAME;;
202 esac
204 TMP_DIRS=${TMP_DIRS:-"/tmp /var/tmp"}
205 MACHINE_ARCH=${MACHINE_ARCH:-$MACHINE}
206 # we mount server:/share/arch/$SHARE_ARCH as /usr/local
207 SHARE_ARCH=${SHARE_ARCH:-$OS/$OSMAJOR.X/$MACHINE_ARCH}
208 LN=${LN:-ln}
209 TR=${TR:-tr}
211 # Some people like have /share/$HOST_TARGET/bin etc.
212 HOST_TARGET=`echo ${OS}${OSMAJOR}-${MACHINE_ARCH} | toLower`
213 export HOST_TARGET
215 case `echo -n .` in -n*) N=; C="\c";; *) N=-n; C=;; esac
217 export HOSTNAME HOST
218 export OS MACHINE MACHINE_ARCH OSREL OSMAJOR LOCAL_FS TMP_DIRS MAILER N C K PS_AXC
219 export LN SHARE_ARCH TR
221 case /$0 in
222 */os.sh)
223 for v in $*
225 eval vv=\$$v
226 echo "$v='$vv'"
227 done
229 esac