find-systype.sh
changeset 0 c045670f36e9
equal deleted inserted replaced
-1:000000000000 0:c045670f36e9
       
     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 
       
    17 exec 2>/dev/null
       
    18 sys="`uname -s | tr '/:[A-Z]' '..[a-z]'`"
       
    19 if [ x"$sys" != x ]
       
    20 then
       
    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)
       
    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
       
    96 else
       
    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
       
   116 fi
       
   117 
       
   118 case "$chip" in
       
   119 80486)
       
   120   # let's try to be consistent here. (BSD/OS)
       
   121   chip=i486
       
   122   ;;
       
   123 i486DX)
       
   124   # respect the hyphen hierarchy. (FreeBSD)
       
   125   chip=i486-dx
       
   126   ;;
       
   127 i486.DX2)
       
   128   # respect the hyphen hierarchy. (FreeBSD)
       
   129   chip=i486-dx2
       
   130   ;;
       
   131 Intel.586)
       
   132   # no, you nitwits, there is no such chip. (NeXTStep)
       
   133   chip=pentium
       
   134   ;;
       
   135 i586)
       
   136   # no, you nitwits, there is no such chip. (Linux)
       
   137   chip=pentium
       
   138   ;;
       
   139 i686)
       
   140   # STOP SAYING THAT! (Linux)
       
   141   chip=ppro
       
   142 esac
       
   143 
       
   144 echo "$oper-:$arch-:$syst-:$chip-:$kern-" | tr ' [A-Z]' '.[a-z]'