1# oper-:arch-:syst-:chip-:kern-
2# oper = operating system type; e.g., sunos-4.1.4
3# arch = machine language; e.g., sparc
4# syst = which binaries can run; e.g., sun4
5# chip = chip model; e.g., micro-2-80
6# kern = kernel version; e.g., sun4m
7# dependence: arch --- chip
8#                 \        \
9#          oper --- syst --- kern
10# so, for example, syst is interpreted in light of oper, but chip is not.
11# anyway, no slashes, no extra colons, no uppercase letters.
12# the point of the extra -'s is to ease parsing: can add hierarchies later.
13# e.g., *:i386-*:*:pentium-*:* would handle pentium-100 as well as pentium,
14# and i386-486 (486s do have more instructions, you know) as well as i386.
15# the idea here is to include ALL useful available information.
16
17exec 2>/dev/null
18sys="`uname -s | tr '/:[A-Z]' '..[a-z]'`"
19if [ x"$sys" != x ]
20then
21  unamer="`uname -r | tr /: ..`"
22  unamem="`uname -m | tr /: ..`"
23  unamev="`uname -v | tr /: ..`"
24
25  case "$sys" in
26  bsd.os)
27    # in bsd 4.4, uname -v does not have useful info.
28    # in bsd 4.4, uname -m is arch, not chip.
29    oper="$sys-$unamer"
30    arch="$unamem"
31    syst=""
32    chip="`sysctl -n hw.model`"
33    kern=""
34    ;;
35  freebsd|dragonfly)
36    # see above about bsd 4.4
37    oper="$sys-$unamer"
38    arch="$unamem"
39    syst=""
40    chip="`sysctl -n hw.model`" # hopefully
41    kern=""
42    ;;
43  netbsd)
44    # see above about bsd 4.4
45    oper="$sys-$unamer"
46    arch="$unamem"
47    syst=""
48    chip="`sysctl -n hw.model`" # hopefully
49    kern=""
50    ;;
51  linux)
52    # as in bsd 4.4, uname -v does not have useful info.
53    oper="$sys-$unamer"
54    syst=""
55    chip="$unamem"
56    kern=""
57    case "$chip" in
58    i386|i486|i586|i686)
59      arch="i386"
60      ;;
61    alpha)
62      arch="alpha"
63      ;;
64    esac
65    ;;
66  aix)
67    # naturally IBM has to get uname -r and uname -v backwards. dorks.
68    oper="$sys-$unamev-$unamer"
69    arch="`arch | tr /: ..`"
70    syst=""
71    chip="$unamem"
72    kern=""
73    ;;
74  sunos)
75    oper="$sys-$unamer-$unamev"
76    arch="`(uname -p || mach) | tr /: ..`"
77    syst="`arch | tr /: ..`"
78    chip="$unamem" # this is wrong; is there any way to get the real info?
79    kern="`arch -k | tr /: ..`"
80    ;;
81  unix_sv)
82    oper="$sys-$unamer-$unamev"
83    arch="`uname -m`"
84    syst=""
85    chip="$unamem"
86    kern=""
87    ;;
88  *)
89    oper="$sys-$unamer-$unamev"
90    arch="`arch | tr /: ..`"
91    syst=""
92    chip="$unamem"
93    kern=""
94    ;;
95  esac
96else
97  $CC -c trycpp.c
98  $LD -o trycpp trycpp.o
99  case `./trycpp` in
100  nextstep)
101    oper="nextstep-`hostinfo | sed -n 's/^[ 	]*NeXT Mach \([^:]*\):.*$/\1/p'`"
102    arch="`hostinfo | sed -n 's/^Processor type: \(.*\) (.*)$/\1/p' | tr /: ..`"
103    syst=""
104    chip="`hostinfo | sed -n 's/^Processor type: .* (\(.*\))$/\1/p' | tr ' /:' '...'`"
105    kern=""
106    ;;
107  *)
108    oper="unknown"
109    arch=""
110    syst=""
111    chip=""
112    kern=""
113    ;;
114  esac
115  rm -f trycpp.o trycpp
116fi
117
118case "$chip" in
11980486)
120  # let's try to be consistent here. (BSD/OS)
121  chip=i486
122  ;;
123i486DX)
124  # respect the hyphen hierarchy. (FreeBSD)
125  chip=i486-dx
126  ;;
127i486.DX2)
128  # respect the hyphen hierarchy. (FreeBSD)
129  chip=i486-dx2
130  ;;
131Intel.586)
132  # no, you nitwits, there is no such chip. (NeXTStep)
133  chip=pentium
134  ;;
135i586)
136  # no, you nitwits, there is no such chip. (Linux)
137  chip=pentium
138  ;;
139i686)
140  # STOP SAYING THAT! (Linux)
141  chip=ppro
142esac
143
144echo "$oper-:$arch-:$syst-:$chip-:$kern-" | tr ' [A-Z]' '.[a-z]'
145