head 1.19;
access;
symbols;
locks; strict;
comment @# @;
1.19
date 2003.12.11.20.43.41; author rse; state Exp;
branches;
next 1.18;
1.18
date 2003.10.31.20.43.57; author rse; state Exp;
branches;
next 1.17;
1.17
date 2003.10.31.20.27.48; author rse; state Exp;
branches;
next 1.16;
1.16
date 2003.10.31.20.01.18; author rse; state Exp;
branches;
next 1.15;
1.15
date 2003.10.28.09.31.49; author rse; state Exp;
branches;
next 1.14;
1.14
date 2003.10.26.11.31.12; author rse; state Exp;
branches;
next 1.13;
1.13
date 2003.10.26.10.12.18; author rse; state Exp;
branches;
next 1.12;
1.12
date 2003.09.29.12.53.15; author rse; state Exp;
branches;
next 1.11;
1.11
date 2003.09.29.10.11.31; author rse; state Exp;
branches;
next 1.10;
1.10
date 2003.09.28.12.17.08; author rse; state Exp;
branches;
next 1.9;
1.9
date 2003.09.13.18.17.49; author rse; state Exp;
branches;
next 1.8;
1.8
date 2003.09.12.09.25.06; author rse; state Exp;
branches;
next 1.7;
1.7
date 2003.09.11.17.59.34; author rse; state Exp;
branches;
next 1.6;
1.6
date 2003.09.09.09.24.32; author rse; state Exp;
branches;
next 1.5;
1.5
date 2003.09.09.09.05.31; author rse; state Exp;
branches;
next 1.4;
1.4
date 2003.09.08.19.13.00; author rse; state Exp;
branches;
next 1.3;
1.3
date 2003.09.08.19.03.03; author rse; state Exp;
branches;
next 1.2;
1.2
date 2003.09.08.11.24.01; author rse; state Exp;
branches;
next 1.1;
1.1
date 2003.09.08.11.16.13; author rse; state Exp;
branches;
next ;
desc
@@
1.19
log
@add RedHat AS, ES, WS and Fedora support
@
text
@##
## OSSP platform - Unix Platform Identification
## Copyright (c) 2003 The OSSP Project
## Copyright (c) 2003 Ralf S. Engelschall
##
## This file is part of OSSP platform, a Unix platform identification
## program which can be found at http://www.ossp.org/pkg/tool/platform/.
##
## This program is free software; you can redistribute it and/or modify
## it under the terms of the GNU General Public License as published by
## the Free Software Foundation; either version 2.0 of the License, or
## (at your option) any later version.
##
## This program is distributed in the hope that it will be useful,
## but WITHOUT ANY WARRANTY; without even the implied warranty of
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
## General Public License for more details.
##
## You should have received a copy of the GNU General Public License
## along with this library; if not, write to the Free Software
## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
## USA, or contact Ralf S. Engelschall .
##
## platform.sh: the program (language: Bourne-Shell)
##
# program information
prog_run="${0}"
prog_cmd="platform"
prog_name="OSSP platform"
prog_vers="0.1.0"
prog_date="30-Oct-2003"
## _________________________________________________________________________
##
## COMMAND LINE PARSING
## (partly derived from GNU shtool's sh.common)
## _________________________________________________________________________
##
# the command line specification
str_usage="[-F|--format FORMAT]"
str_usage="$str_usage [-S|--sep STRING]"
str_usage="$str_usage [-C|--conc STRING]"
str_usage="$str_usage [-L|--lower]"
str_usage="$str_usage [-U|--upper]"
str_usage="$str_usage [-v|--verbose]"
str_usage="$str_usage [-c|--concise]"
str_usage="$str_usage [-n|--no-newline]"
str_usage="$str_usage [-t|--type TYPE]"
str_usage="$str_usage [-d|--debug]"
str_usage="$str_usage [-V|--version]"
str_usage="$str_usage [-h|--help]"
arg_spec="0="
opt_spec="F:S:C:L.U.v.c.n.t:d.V.h."
opt_alias="F:format,S:sep,C:conc,L:lower,U:upper,v:verbose,c:consise,t:type,n:no-newline,d:debug,V:version,h:help"
opt_F="%{sp} (%{ap})"
opt_S=" "
opt_C="/"
opt_L=no
opt_U=no
opt_t=""
opt_v=no
opt_c=no
opt_n=no
opt_d=no
opt_V=no
opt_h=no
# commonly used ASCII values
ASC_TAB=" "
ASC_NL="
"
# parse argument specification string
eval `echo $arg_spec |\
sed -e 's/^\([0-9]*\)\([+=]\)/arg_NUMS=\1; arg_MODE=\2/'`
# parse option specification string
eval `echo $opt_spec |\
sed -e 's/\([a-zA-Z0-9]\)\([.:+]\)/opt_MODE_\1=\2;/g'`
# parse option alias string
eval `echo $opt_alias |\
tr 'x-' 'x_' | sed -e 's/\([a-zA-Z0-9]\):\([^,]*\),*/opt_ALIAS_\2=\1;/g'`
# interate over argument line
opt_PREV=''
while [ $# -gt 0 ]; do
# special option stops processing
if [ ".$1" = ".--" ]; then
shift
break
fi
# determine option and argument
opt_ARG_OK=no
if [ ".$opt_PREV" != . ]; then
# merge previous seen option with argument
opt_OPT="$opt_PREV"
opt_ARG="$1"
opt_ARG_OK=yes
opt_PREV=''
else
# split argument into option and argument
case "$1" in
--[a-zA-Z0-9]*=*)
eval `echo "x$1" |\
sed -e 's/^x--\([a-zA-Z0-9-]*\)=\(.*\)$/opt_OPT="\1";opt_ARG="\2"/'`
opt_STR=`echo $opt_OPT | tr 'x-' 'x_'`
eval "opt_OPT=\${opt_ALIAS_${opt_STR}-${opt_OPT}}"
;;
--[a-zA-Z0-9]*)
opt_OPT=`echo "x$1" | cut -c4-`
opt_STR=`echo $opt_OPT | tr 'x-' 'x_'`
eval "opt_OPT=\${opt_ALIAS_${opt_STR}-${opt_OPT}}"
opt_ARG=''
;;
-[a-zA-Z0-9]*)
eval `echo "x$1" |\
sed -e 's/^x-\([a-zA-Z0-9]\)/opt_OPT="\1";/' \
-e 's/";\(.*\)$/"; opt_ARG="\1"/'`
;;
-[a-zA-Z0-9])
opt_OPT=`echo "x$1" | cut -c3-`
opt_ARG=''
;;
*)
break
;;
esac
fi
# eat up option
shift
# determine whether option needs an argument
eval "opt_MODE=\$opt_MODE_${opt_OPT}"
if [ ".$opt_ARG" = . ] && [ ".$opt_ARG_OK" != .yes ]; then
if [ ".$opt_MODE" = ".:" ] || [ ".$opt_MODE" = ".+" ]; then
opt_PREV="$opt_OPT"
continue
fi
fi
# process option
case $opt_MODE in
'.' )
# boolean option
eval "opt_${opt_OPT}=yes"
;;
':' )
# option with argument (multiple occurances override)
eval "opt_${opt_OPT}=\"\$opt_ARG\""
;;
'+' )
# option with argument (multiple occurances append)
eval "opt_${opt_OPT}=\"\$opt_${opt_OPT}\${ASC_NL}\$opt_ARG\""
;;
* )
echo "${prog_cmd}:Error: unknown option: \`$opt_OPT'" 1>&2
echo "${prog_cmd}:Hint: run \`${prog_run} -h' or \`man ${prog_cmd}' for details" 1>&2
exit 1
;;
esac
done
if [ ".$opt_PREV" != . ]; then
echo "${prog_cmd}:Error: missing argument to option \`$opt_PREV'" 1>&2
echo "${prog_cmd}:Hint: run \`${prog_run} -h' or \`man ${prog_cmd}' for details" 1>&2
exit 1
fi
# process help option
if [ ".$opt_h" = .yes ]; then
echo "Usage: ${prog_run} ${str_usage}"
exit 0
fi
# process version option
if [ ".$opt_V" = .yes ]; then
echo "${prog_name} ${prog_vers} (${prog_date})"
exit 0
fi
# complain about incorrect number of arguments
case $arg_MODE in
'=' )
if [ $# -ne $arg_NUMS ]; then
echo "${prog_cmd}:Error: invalid number of arguments (exactly $arg_NUMS expected)" 1>&2
echo "${prog_cmd}:Hint: run \`${prog_run} -h' or \`man ${prog_cmd}' for details" 1>&2
exit 1
fi
;;
'+' )
if [ $# -lt $arg_NUMS ]; then
echo "${prog_cmd}:Error: invalid number of arguments (at least $arg_NUMS expected)" 1>&2
echo "${prog_cmd}:Hint: run \`${prog_run} -h' or \`man ${prog_cmd}' for details" 1>&2
exit 1
fi
;;
esac
## _________________________________________________________________________
##
## OPTION POST-PROCESSING
## _________________________________________________________________________
##
if [ ".$opt_t" != . ]; then
case "$opt_t" in
binary )
# binary package id (OpenPKG RPM)
opt_F="%-%"
opt_L=yes
opt_S=""
opt_C="+"
;;
build )
# build time checking (OpenPKG RPM)
opt_F="%-%"
opt_L=yes
opt_S=""
opt_C="+"
;;
gnu )
# GNU config.guess style --
opt_F="%-unknown-%"
opt_L=yes
opt_S=""
opt_C="+"
;;
web )
# non-whitespace HTTP Server-header id
opt_F="%-%"
opt_S="/"
opt_C="+"
;;
summary)
# human readable verbose summary information
opt_F="Class: %[sc] (%[ac])\\nProduct: %[sp] (%[ap])\\nTechnology: %[st] (%[at])"
opt_S=" "
opt_C="/"
;;
all-in-one )
# full-table all-in-one information
opt_F=""
opt_F="${opt_F}concise architecture class: %\\n"
opt_F="${opt_F}regular architecture class: %{ac}\\n"
opt_F="${opt_F}verbose architecture class: %[ac]\\n"
opt_F="${opt_F}concise architecture product: %\\n"
opt_F="${opt_F}regular architecture product: %{ap}\\n"
opt_F="${opt_F}verbose architecture product: %[ap]\\n"
opt_F="${opt_F}concise architecture technology: %\\n"
opt_F="${opt_F}regular architecture technology: %{at}\\n"
opt_F="${opt_F}verbose architecture technology: %[at]\\n"
opt_F="${opt_F}concise system class: %\\n"
opt_F="${opt_F}regular system class: %{sc}\\n"
opt_F="${opt_F}verbose system class: %[sc]\\n"
opt_F="${opt_F}concise system product: %\\n"
opt_F="${opt_F}regular system product: %{sp}\\n"
opt_F="${opt_F}verbose system product: %[sp]\\n"
opt_F="${opt_F}concise system technology: %\\n"
opt_F="${opt_F}regular system technology: %{st}\\n"
opt_F="${opt_F}verbose system technology: %[st]"
;;
* )
echo "${prog_cmd}:Error: invalid type \`$opt_t'" 1>&2
exit 1
;;
esac
fi
## _________________________________________________________________________
##
## UTILITY FUNCTIONS
## _________________________________________________________________________
##
# map string to lower case
util_lower () {
echo "$1" | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'
}
# map string to upper case
util_upper () {
echo "$1" | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
}
## _________________________________________________________________________
##
## ASSEMBLE INITIAL INFORMATION
## _________________________________________________________________________
##
UNAME_MACHINE=`(uname -m) 2>/dev/null` ||\
UNAME_MACHINE=`(uname -p) 2>/dev/null` ||\
UNAME_MACHINE='unknown'
UNAME_SYSTEM=`(uname -s) 2>/dev/null` ||\
UNAME_SYSTEM='unknown'
UNAME_RELEASE=`(uname -r) 2>/dev/null` ||\
UNAME_RELEASE=`(uname -v) 2>/dev/null` ||\
UNAME_RELEASE='unknown'
UNAME="${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}"
if [ ".$opt_d" = .yes ]; then
echo "uname => ${UNAME}" 1>&2
fi
AC=""; AP=""; AT=""
SC=""; SP=""; ST=""
## _________________________________________________________________________
##
## DISPATCH INTO PLATFORMS
## _________________________________________________________________________
##
case "${UNAME}" in
# FreeBSD
*:FreeBSD:* )
# determine architecture
AC="${UNAME_MACHINE}"
case "${AC}" in
i386 ) AC="iX86" ;;
esac
AP="${AC}"
AT=`(/sbin/sysctl -n hw.model) 2>&1`
case "${AT}" in
*"Xeon"* | *"Pentium Pro"* | *"Cyrix 6x86MX"* | *"Pentium II"* | *"Pentium III"* | *"Pentium 4"* | *"Celeron"* ) AT="i686" ;;
*"Pentium"* ) AT="i586" ;; *"i486[SD]X"* | *"Cyrix 486"* | *"Cyrix [56]x86"* | *"Blue Lightning" | *"Cyrix 486S/DX" ) AT="i486" ;;
*"i386[SD]X"* | *"NexGen 586"* ) AT="i386" ;;
* ) AT="${AP}" ;;
esac
# determine system
r=`echo "${UNAME_RELEASE}" |\
sed -e 's;[()];;' -e 's/\(-.*\)$/[\1]/'`
ST="FreeBSD ${r}"
SP="${ST}"
case "${r}" in
1.* ) SC="4.3BSD" ;;
* ) SC="4.4BSD" ;;
esac
;;
# NetBSD
*:NetBSD:* )
# determine architecture
AT="${UNAME_MACHINE}"
AP="${AT}"
case "${AP}" in
i[3-6]86 ) AP="iX86" ;;
esac
AC="${AP}"
# determine system
r=`echo "${UNAME_RELEASE}" | sed -e 's/\(-.*\)$/[\1]/'`
ST="NetBSD ${r}"
SP="${ST}"
case "${r}" in
0.* ) SC="4.3BSD" ;;
* ) SC="4.4BSD" ;;
esac
;;
# OpenBSD
*:OpenBSD:* )
# determine architecture
AT="${UNAME_MACHINE}"
AP="${AT}"
case "${AP}" in
i[3-6]86 ) AP="iX86" ;;
esac
AC="${AP}"
# determine system
r=`echo "${UNAME_RELEASE}" | sed -e 's/\(-.*\)$/[\1]/'`
ST="OpenBSD ${r}"
SP="${ST}"
SC="4.4BSD"
;;
# GNU/Linux
*:Linux:* )
# determine architecture
AT="${UNAME_MACHINE}"
case "${AT}" in
ia64 ) AT="IA64" ;;
x86_64 ) AT='AMD64' ;;
parisc ) AT="HPPA32" ;;
parisc64 ) AT="HPPA64" ;;
esac
AP="${AT}"
case "${AP}" in
i[3-6]86 ) AP='iX86' ;;
esac
AC="${AP}"
# determine system
v_kern=`echo "${UNAME_RELEASE}" |\
sed -e 's/^\([0-9][0-9]*\.[0-9][0-9]*\).*/\1/'`
v_libc=`(strings /lib/libc.so.* | grep '^GLIBC_' | sed -e 's/^GLIBC_//' |\
sort -n | tail -1 | sed -e 's/^\([0-9][0-9]*\.[0-9][0-9]*\).*/\1/') 2>/dev/null`
ST="GNU/${v_libc}/<${v_kern}>"
if [ -f /etc/lsb-release ]; then
eval `( . /etc/lsb-release
echo "SC=\"LSB${LSB_VERSION}\""
if [ ".${DISTRIB_ID}" != . -a ".${DISTRIB_RELEASE}" != . ]; then
echo "SP=\"${DISTRIB_ID} ${DISTRIB_RELEASE}\""
fi
) 2>/dev/null`
fi
if [ ".$SP" = . ]; then
for tagfile in x \
`cd /etc && \
/bin/ls *[_-]release *[_-]version 2>/dev/null | \
sed -e '/^redhat-release$/d' -e '/^lsb-release$/d'; \
echo redhat-release lsb-release`
do
[ ".${tagfile}" = .x ] && continue
[ ! -f "/etc/${tagfile}" ] && continue
n=`echo ${tagfile} | sed -e 's/[_-]release$//' -e 's/[_-]version$//'`
v=`(grep VERSION /etc/${tagfile}; cat /etc/${tagfile}) | grep '[0-9]' | head -1 |\
sed -e 's/^/#/' \
-e 's/^#[^0-9]*\([0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\).*$/\1/' \
-e 's/^#[^0-9]*\([0-9][0-9]*\.[0-9][0-9]*\).*$/\1/' \
-e 's/^#[^0-9]*\([0-9][0-9]*\).*$/\1/' \
-e 's/^#.*$//'`
t=""
if [ ".${n}" = .redhat ]; then
t=`head -1 /etc/${tagfile} | \
sed -e 's/^/#/' \
-e 's/^#.*Red Hat Enterprise Linux \([AEW]S\).*$/\1/' \
-e 's/^#.*$//'`
fi
case "`util_lower ${n}`" in
debian ) n="Debian[ GNU/Linux]" ;;
fedora ) n="Fedora[ GNU/Linux]" ;;
redhat ) n="RedHat[ Linux]" ;;
suse ) n="SuSE[ Linux]" ;;
mandrake ) n="Mandrake[ Linux]" ;;
gentoo ) n="Gentoo[ Linux]" ;;
slackware ) n="Slackware[ Linux]" ;;
turbolinux ) n="TurboLinux" ;;
unitedlinux ) n="UnitedLinux" ;;
* ) n="${n}[ GNU/Linux]" ;;
esac
if [ ".${t}" != . ]; then
n="${n} ${t}"
fi
SP="$n $v"
break
done
fi
[ ".$SP" = . ] && SP="${ST}"
[ ".$SC" = . ] && SC="LSB"
;;
# Sun Solaris
*:SunOS:* )
# determine architecture
AT="${UNAME_MACHINE}"
case "${AT}" in
i86pc ) AT="iX86" ;;
esac
AP="${AT}"
case "${AP}" in
sun4[cdm] ) AP="SPARC32" ;;
sun4u ) AP="SPARC64" ;;
sun4* ) AP="SPARC" ;;
esac
AC="${AP}"
case "${AC}" in
SPARC* ) AC="SPARC" ;;
esac
# determine system
ST="[Sun ]SunOS ${UNAME_RELEASE}"
v=`echo "${UNAME_RELEASE}" |\
sed -e 's;^4\.;1.;' \
-e 's;^5\.\([0-6]\)[^0-9]*$;2.\1;' \
-e 's;^5\.\([0-9][0-9]*\).*;\1;'`
SP="[Sun ]Solaris $v"
case "${UNAME_RELEASE}" in
4.* ) SC="4.3BSD" ;;
5.* ) SC="SVR4" ;;
esac
;;
# SCO UnixWare
*:UnixWare:* )
# determine architecture
AT="${UNAME_MACHINE}"
case "${AT}" in
i[3-6]86 | ix86at ) AT="iX86" ;;
esac
AP="${AT}"
# determine system
v=`/sbin/uname -v`
ST="[SCO ]UnixWare ${v}"
SP="${ST}"
SC="SVR${UNAME_RELEASE}"
;;
# QNX
*:QNX:* )
# determine architecture
AT="${UNAME_MACHINE}"
case "${AT}" in
x86pc ) AT="iX86" ;;
esac
AP="${AT}"
# determine system
v="${UNAME_RELEASE}"
ST="QNX[ Neutrino RTOS] ${v}"
v=`echo "${v}" | sed -e 's;^\([0-9][0-9]*\.[0-9][0-9]*\).*$;\1;'`
SP="QNX[ Neutrino RTOS] ${v}"
SC="QNX"
;;
# SGI IRIX
*:IRIX*:* )
# determine architecture
AT="${UNAME_MACHINE}"
AP="${AT}"
case "${AP}:${UNAME_SYSTEM}" in
IP*:IRIX64 ) AP="MIPS64" ;;
IP*:* ) AP="MIPS" ;;
esac
AC="${AP}"
# determine system
v=`(/bin/uname -R || /bin/uname -r) 2>/dev/null | sed -e 's;[0-9.]* ;;'`
ST="[SGI ]IRIX ${v}"
v="${UNAME_RELEASE}"
SP="[SGI ]IRIX ${v}"
SC="4.2BSD/SVR3"
;;
# HP HP-UX
*:HP-UX:* )
# determine architecture
AT="${UNAME_MACHINE}"
case "${AT}" in
ia64 ) AT="IA64" ;;
9000/[34]?? ) AT=M68K ;;
9000/[678][0-9][0-9])
sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null`
sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null`
case "${sc_cpu_version}" in
523 ) AT="HPPA1.0" ;;
528 ) AT="HPPA1.1" ;;
532 ) AT="HPPA2.0"
case "${sc_kernel_bits}" in
32 ) AT="${AT}n" ;;
64 ) AT="${AT}w" ;;
esac
;;
esac
;;
esac
AP="${AT}"
case "${AP}" in
HPPA* ) AP="HPPA" ;;
esac
AC="${AP}"
# determine system
v=`echo "${UNAME_RELEASE}" | sed -e 's;^[^0-9]*;;'`
ST="[HP ]- ${v}"
SP="${ST}"
case "${v}" in
10.* ) SC="SVR4.2" ;;
[7-9]* ) SC="SVR4" ;;
esac
;;
# HP Tru64 (OSF1)
*:OSF1:* )
# determine architecture
AP="${UNAME_MACHINE}"
case "${AP}" in
alpha ) AP="Alpha" ;;
esac
alpha_type=`(/usr/sbin/psrinfo -v) 2>/dev/null |\
sed -n -e 's/^.*The alpha \([^ ][^ ]*\).*processor.*$/\1/p' | head -n 1`
AT="${AP}${alpha_type}"
AC="${AP}"
# determine system
v=`echo "${UNAME_RELEASE}" | sed -e 's;^[VTX];;'`
ST="[HP ]Tru64 ${v}"
SP="${ST}"
SC="OSF1"
;;
# IBM AIX
*:AIX:* )
cpu_arch=rs6000
if [ -x /usr/sbin/lsdev -a -x /usr/sbin/lsattr ]; then
cpu_id=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'`
if [ ".`/usr/sbin/lsattr -El ${cpu_id} | grep -i powerpc`" != . ]; then
cpu_arch=powerpc
fi
fi
if [ -x /usr/bin/oslevel ]; then
os_level=`/usr/bin/oslevel`
else
os_level="`uname -r`.`uname -v`"
fi
os_level=`echo "${os_level}" |\
sed -e 's;^\([0-9][0-9]*\.[0-9][0-9]*\)\(\.[0-9][0-9]*\)\(.*\)$;<\1>\2[\3];' \
-e 's;^\([0-9][0-9]*\.[0-9][0-9]*\)\(.*\)$;<\1>\2;'`
AT="${cpu_arch}"
AP="${AT}"
AC="${AP}"
ST="[IBM ]AIX ${os_level}"
SP="${ST}"
case "${os_level}" in
[12]* ) SC="SVR2" ;;
* ) SC="SVR4" ;;
esac
;;
# Apple MacOS X Darwin
*:Darwin:* )
AT=`uname -p`
case "${AT}" in
powerpc ) AT="PPC" ;;
esac
AP="${AT}"
AC="${AP}"
case "${AC}" in
i?86 ) AC="iX86" ;;
esac
ST="[Apple ]${UNAME_SYSTEM} ${UNAME_RELEASE}"
SP="${ST}"
SC="4.4BSD/Mach3"
;;
# TODO ...ADD YOUR NEW PLATFORM CHECK HERE... TODO
# *:XXX:* )
# ...
# ;;
# ...A STILL UNKNOWN PLATFORM...
* )
AT=`echo "${UNAME_MACHINE}" | sed -e "s; ;${opt_C};g"`
AP="${AT}"
AC="${AP}"
v=`echo "${UNAME_RELEASE}" |\
sed -e 's/^/#/' \
-e 's/^#[^0-9]*\([0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\).*$/\1/' \
-e 's/^#[^0-9]*\([0-9][0-9]*\.[0-9][0-9]*\).*$/\1/' \
-e 's/^#[^0-9]*\([0-9][0-9]*\).*$/\1/' \
-e 's/^#.*$/?/'`
ST="${UNAME_SYSTEM} ${v}"
SP="${ST}"
SC="${SP}"
;;
esac
## _________________________________________________________________________
##
## PROVIDE RESULT OUTPUT
## _________________________________________________________________________
##
# provide fallback values
[ ".$AT" = . ] && AT="${AP:-${AC}}"
[ ".$AP" = . ] && AP="${AT:-${AC}}"
[ ".$AC" = . ] && AC="${AP:-${AT}}"
[ ".$ST" = . ] && ST="${SP:-${SC}}"
[ ".$SP" = . ] && SP="${ST:-${SC}}"
[ ".$SC" = . ] && SC="${SP:-${ST}}"
# support explicit enforced verbose/concise output
if [ ".$opt_v" = .yes ]; then
opt_F=`echo ":$opt_F" | sed -e 's/^://' -e 's/%\([as][cpt]\)/%[\1]/g'`
elif [ ".$opt_c" = .yes ]; then
opt_F=`echo ":$opt_F" | sed -e 's/^://' -e 's/%\([as][cpt]\)/%<\1>/g'`
fi
# provide verbose and concise variants
AC_V=""; AC_N=""; AC_C=""
AP_V=""; AP_N=""; AP_C=""
AT_V=""; AT_N=""; AT_C=""
SC_V=""; SC_N=""; SC_C=""
SP_V=""; SP_N=""; SP_C=""
ST_V=""; ST_N=""; ST_C=""
for var_lc in at ap ac st sp sc; do
case "$opt_F" in
*"%[${val_lc}]"* | *"%{${val_lc}}"* | *"%${val_lc}"* | *"%<${val_lc}>"* )
var_uc=`util_upper "$var_lc"`
eval "val=\"\$${var_uc}\""
val_V=""; val_N=""; val_C=""
case "$opt_F" in
*"%[${var_lc}]"* )
val_V=`echo ":$val" | \
sed -e 's/^://' \
-e 's;\[\([^]]*\)\];\1;g' \
-e 's;<\([^>]*\)>;\1;g' \
-e "s; ;§§;g" \
-e "s;/;%%;g" \
-e "s;§§;${opt_S};g" \
-e "s;%%;${opt_C};g"`
eval "${var_uc}_V=\"\${val_V}\""
;;
esac
case "$opt_F" in
*"%{${var_lc}}"* | *"%${var_lc}"* )
val_N=`echo ":$val" | \
sed -e 's/^://' \
-e 's;\[\([^]]*\)\];;g' \
-e 's;<\([^>]*\)>;\1;g' \
-e "s; ;§§;g" \
-e "s;/;%%;g" \
-e "s;§§;${opt_S};g" \
-e "s;%%;${opt_C};g"`
eval "${var_uc}_N=\"\${val_N}\""
;;
esac
case "$opt_F" in
*"%<${var_lc}>"* )
val_C=`echo ":$val" | \
sed -e 's/^://' \
-e 's;\[\([^]]*\)\];;g' \
-e 's;[^<]*<\([^>]*\)>;\1;g' \
-e "s; ;§§;g" \
-e "s;/;%%;g" \
-e "s;§§;${opt_S};g" \
-e "s;%%;${opt_C};g"`
eval "${var_uc}_C=\"\${val_C}\""
;;
esac
;;
esac
done
# create output string
output=`echo ":$opt_F" |\
sed -e "s/^://" \
-e "s;%\\[ac\\];${AC_V};g" \
-e "s;%{ac};${AC_N};g" \
-e "s;%ac;${AC_N};g" \
-e "s;%;${AC_C};g" \
-e "s;%\\[ap\\];${AP_V};g" \
-e "s;%{ap};${AP_N};g" \
-e "s;%ap;${AP_N};g" \
-e "s;%;${AP_C};g" \
-e "s;%\\[at\\];${AT_V};g" \
-e "s;%{at};${AT_N};g" \
-e "s;%at;${AT_N};g" \
-e "s;%;${AT_C};g" \
-e "s;%\\[sc\\];${SC_V};g" \
-e "s;%{sc};${SC_N};g" \
-e "s;%sc;${SC_N};g" \
-e "s;%;${SC_C};g" \
-e "s;%\\[sp\\];${SP_V};g" \
-e "s;%{sp};${SP_N};g" \
-e "s;%sp;${SP_N};g" \
-e "s;%;${SP_C};g" \
-e "s;%\\[st\\];${ST_V};g" \
-e "s;%{st};${ST_N};g" \
-e "s;%st;${ST_N};g" \
-e "s;%;${ST_C};g" \
-e 's/\\\\n/^/g' |\
tr '^' '\012'`
# support lower/upper-case mapping
if [ ".$opt_L" = .yes ]; then
output=`util_lower "$output"`
elif [ ".$opt_U" = .yes ]; then
output=`util_upper "$output"`
fi
# display output string
if [ ".$opt_n" = .yes ]; then
echo . | awk '{ printf("%s", output); }' output="$output"
else
echo "$output"
fi
@
1.18
log
@bump date
@
text
@d406 1
a406 1
if [ ".${DISTRIB_ID}" != . ]; then
d412 2
a413 1
for tagfile in x `cd /etc && \
d415 3
a417 1
sed -e '/redhat-release/d'; echo redhat-release`; do
d427 7
d436 1
d446 3
@
1.17
log
@more correct IBM AIX platform information determination (not tried on a real AIX box, but assembled together from various information pieces found on the net)
@
text
@d32 1
a32 1
prog_date="06-Sep-2003"
@
1.16
log
@small fixes (found through HP TestDrive machines)
@
text
@d579 16
a594 1
AT="${UNAME_MACHINE}"
d597 1
a597 1
ST="[IBM ]AIX ${UNAME_RELEASE}"
d599 1
a599 1
case "${UNAME_RELEASE}" in
@
1.15
log
@correctly support Solaris 10
@
text
@d2 1
a2 1
## OSSP platform - Platform Identification
d387 4
a390 1
x86_64 ) AT='AMD64' ;;
d519 1
a519 1
SC="4.2BSD${opt_C}SVR3"
d551 1
a551 1
ST="[HP ]HP-UX ${v}"
d603 1
a603 1
SC="4.4BSD${opt_C}Mach3"
@
1.14
log
@remove trailing blanks
@
text
@d461 1
a461 1
-e 's;^5\.\([0-6]\).*;2.\1;' \
@
1.13
log
@- Recognize AMD64 architecture under Linux
- correctly recognize SuSE version through "VERSION = xxx" in /etc/SuSE-config
- add Apple MacOS X Darwin detection support
- provide more robust detection for unknown platforms
@
text
@d234 1
a234 1
opt_F="%-%"
d445 1
a445 1
i86pc ) AT="iX86" ;;
d475 1
a475 1
i[3-6]86 | ix86at ) AT="iX86" ;;
d490 1
a490 1
x86pc ) AT="iX86" ;;
d507 2
a508 2
IP*:IRIX64 ) AP="MIPS64" ;;
IP*:* ) AP="MIPS" ;;
d526 1
a526 1
9000/[678][0-9][0-9])
@
1.12
log
@add blind IBM AIX support; add platforms to manual page; cleanup and fix system classes
@
text
@d386 3
d415 1
a415 1
v=`cat /etc/${tagfile} | grep '[0-9]' | head -1 |\
d587 16
d610 1
a610 1
AT="${UNAME_MACHINE}"
d613 7
a619 1
ST="${UNAME_SYSTEM} ${UNAME_RELEASE}"
@
1.11
log
@add NetBSD, OpenBSD, HP HP-UX and HP Tru64 support
@
text
@d347 2
a348 2
# OpenBSD
*:OpenBSD:* )
d358 1
a358 1
ST="OpenBSD ${r}"
d360 4
a363 1
SC="4.4BSD"
d366 2
a367 2
# NetBSD
*:NetBSD:* )
d377 1
a377 1
ST="NetBSD ${r}"
d462 1
a462 1
4.* ) SC="4.2BSD" ;;
d513 1
a513 1
SC="BSD"
d547 4
a550 1
SC="BSD"
d568 14
a581 1
SC="BSD"
@
1.10
log
@add SCO UnixWare, QNX Neutrino RTOS and SGI IRIX support
@
text
@d347 32
d510 52
@
1.9
log
@add more knowledge about particular major Linux distros
@
text
@d432 48
@
1.8
log
@RedHat's (optional) lsb-release file contains only LSB_VERSION, so make sure we do not set SP to a whitespace, which in turn would disable later checks
@
text
@d384 9
a392 6
debian ) n="Debian[ GNU/Linux]" ;;
redhat ) n="RedHat[ Linux]" ;;
suse ) n="SuSE[ Linux]" ;;
mandrake ) n="Mandrake[ Linux]" ;;
gentoo ) n="Gentoo[ Linux]" ;;
* ) n="${n}[ GNU/Linux]" ;;
@
1.7
log
@improve and bugfix Linux detection
@
text
@d365 3
a367 1
echo "SP=\"${DISTRIB_ID} ${DISTRIB_RELEASE}\""
@
1.6
log
@FreeBSD output just Xeon sometimes
@
text
@d360 1
a360 1
sort -n | tail -1 | sed -e 's/^\([0-9][0-9]*\.[0-9][0-9]*\).*/\1/') 2>&1`
d364 2
a365 2
echo "SC=\"LSB${LSB_VERSION}\""
echo "SP=\"${DISTRIB_ID} ${DISTRIB_RELEASE}\""
d369 5
a373 2
for tagfile in dummy `cd /etc && echo *[_-]release *[_-]version 2>/dev/null`; do
test ! -f /etc/${tagfile} && continue
d385 1
a385 1
mandrake ) n="Mandrake[ Linux}" ;;
d390 1
d525 1
a525 1
-e "s;%\[ac\];${AC_V};g" \
d529 1
a529 1
-e "s;%\[ap\];${AP_V};g" \
d533 1
a533 1
-e "s;%\[at\];${AT_V};g" \
d537 1
a537 1
-e "s;%\[sc\];${SC_V};g" \
d541 1
a541 1
-e "s;%\[sp\];${SP_V};g" \
d545 1
a545 1
-e "s;%\[st\];${ST_V};g" \
@
1.5
log
@fix consise output generation and ommit the GNU part in GNU/Linux under consise output
@
text
@d331 1
a331 1
*"Pentium Pro"* | *"Cyrix 6x86MX"* | *"Pentium II"* | *"Pentium III"* | *"Pentium 4"* | *"Celeron"* ) AT="i686" ;;
@
1.4
log
@better LSB support for Linux boxes (especially important for SuSE)
@
text
@d361 1
a361 1
ST="GNU/Linux ${v_libc}/${v_kern}"
d480 1
a480 1
-e 's;<\([^>]*\)>;\1;' \
d493 1
a493 1
-e 's;<\([^>]*\)>;\1;' \
d506 1
a506 1
-e 's;[^<]*<\([^>]*\)>;\1;' \
@
1.3
log
@finish mostly all (initial ;-) features of this program and the corresponding documentation
@
text
@d362 27
a388 19
for tagfile in dummy `cd /etc && echo *[_-]release *[_-]version 2>/dev/null`; do
test ! -f /etc/${tagfile} && continue
n=`echo ${tagfile} | sed -e 's/[_-]release$//' -e 's/[_-]version$//'`
v=`cat /etc/${tagfile} | grep '[0-9]' | head -1 |\
sed -e 's/^/#/' \
-e 's/^#[^0-9]*\([0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\).*$/\1/' \
-e 's/^#[^0-9]*\([0-9][0-9]*\.[0-9][0-9]*\).*$/\1/' \
-e 's/^#[^0-9]*\([0-9][0-9]*\).*$/\1/' \
-e 's/^#.*$//'`
case "`util_lower ${n}`" in
debian ) n="Debian[ GNU/Linux]" ;;
redhat ) n="RedHat[ Linux}" ;;
suse ) n="SuSE[ Linux]" ;;
mandrake ) n="Mandrake[ Linux}" ;;
gentoo ) n="Gentoo[ Linux]" ;;
* ) n="${n}[ GNU/Linux]" ;;
esac
SP="$n $v"
done
d390 1
a390 1
SC="LSB"
@
1.2
log
@fix --upper option
@
text
@d28 1
a28 1
prog_run="${prog_run}"
a46 1
str_usage="$str_usage [-T|--type TYPE]"
d49 2
a50 1
str_usage="$str_usage [-n|--newline]"
d55 3
a57 3
opt_spec="F:S:C:L.U.T:v.c.n.d.V.h."
opt_alias="F:format,S:sep,C:conc,L:lower,U:upper,T:type,v:verbose,c:consise,n:newline,d:debug,V:version,h:help"
opt_F="Class: %sc (%ac)\\nProduct: %sp (%ap)\\nTechnology: %st (%at)"
d62 1
a62 1
opt_T=""
d71 1
a71 1
ASC_TAB=" "
d205 70
d472 5
a476 1
-e 's;<\([^>]*\)>;\1;'`
d485 5
a489 1
-e 's;<\([^>]*\)>;\1;'`
d498 5
a502 1
-e 's;[^<]*<\([^>]*\)>;\1;'`
a545 6
# support particular separator and concatenator strings
output=`echo ":$output" |
sed -e 's/^://' \
-e "s; ;${opt_S};g" \
-e "s;/;${opt_C};g"`
@
1.1
log
@initial OSSP platform (FreeBSD, Linux and Solaris support only)
@
text
@d46 1
a46 1
str_usage="$str_usage [-U|--lower]"
d56 1
a56 1
opt_alias="F:format,S:sep,C:conc,L:lower,T:type,v:verbose,c:consise,n:newline,d:debug,V:version,h:help"
@