#!/bin/bash
# This is part of fou4s
# Copyright (C) 2002-2005 Markus Gaugusch <fou4s@gaugusch.at>
#
# SVN info:
# $Author: markus $
# $Date: 2009-10-17 22:12:44 +0200 (Sat, 17 Oct 2009) $
# $Rev: 210 $

################################ getSuSEVersion
# get version of the running suse product. Used to get the right
# patches from ftp server.
# Modifies: SUSEVERSION, ARCH, SUSEPRODUCT

# try the following files (in this order)
RELEASE_FILES="/etc/SuSE-release /etc/SLOX-release /etc/UnitedLinux-release"

function getSuSEVersion()
{
	local updateinf=/var/lib/YaST/update.inf suserelease=''
	for rel_file in $RELEASE_FILES
	do
		if [ -r "$rel_file" ]; then 
			suserelease="$rel_file" 
			break
		fi
	done
	if [ -z "$suserelease" ]; then
		echo "$0: a release file not found. Tried $RELEASE_FILES. Aborting." >&2
		exit 1
	fi

	SUSEVERSION=`grep ^VERSION $suserelease`
	SUSEVERSION=${SUSEVERSION##VERSION = }
	SUSEVERSION=${SUSEVERSION%%-SERVER} # for SLE/Email Server II
	ARCH=`head -1 $suserelease | tr 'A-Z' 'a-z'`
	# hack for SLES8 (has no update.inf)
	[[ $ARCH == suse\ sles-8* ]] && SUSEVERSION=8 && SUSEPRODUCT=SuSE-SLES && NODOTSUSEVERSION=81
	# hack for SLOX4 (has no update.inf)
	[[ $ARCH == suse\ linux\ openexchange\ server\ 4* ]] && SUSEVERSION=4 && SUSEPRODUCT=Openexchange-Server && NODOTSUSEVERSION=81 && ARCH=i386
	# hack for SLES9
	[[ $ARCH == suse\ linux\ enterprise\ server\ 9* ]] && SUSEVERSION=9 && SUSEPRODUCT=SUSE-CORE && NODOTSUSEVERSION=90
	[[ $ARCH == suse\ linux\ standard\ server\ 8.0* ]] && SUSEVERSION=8 && SUSEPRODUCT=SuSE-Linux-Standard-Server && NODOTSUSEVERSION=90
	# hack for SLES10
	[[ $ARCH == suse\ linux\ enterprise\ server\ 10* ]] && SUSEVERSION=10 && SUSEPRODUCT=SLES && NODOTSUSEVERSION=101
	ARCH=${ARCH##*\(}
	ARCH=${ARCH%%\)*}
 	# translate "architecture name" to download directory:
	case "$ARCH" in
		alpha) ARCH=axp;;     # SuSE-release contains "Alpha" and ftp dir is named "axp"
		amd64) ARCH=x86_64;; # SuSE-release contains "AMD64" and ftp dir is named "x86_64"
		x86-64) ARCH=x86_64;; # SuSE-release contains "x86_64" and ftp dir is named "x86_64"
		s/390) ARCH=s390;;    # Apparently a directory can't be called "s/390"...
	esac
	if [ "$NODOTSUSEVERSION" = foo ] ; then
		NODOTSUSEVERSION=${SUSEVERSION//./} #version without dots for comparing
	fi
	if [[ $ARCH == i586 ]] && [ $NODOTSUSEVERSION -ge 82 ] ; then
		ARCH=i386 #hack - SuSE-release contains i586 on 8.2 and dirname is "i386"
	fi

	[[ $NODOTSUSEVERSION -ge 90 ]] && rpmbuild=rpmbuild || rpmbuild=rpm
	VALIDARCHS=`eval $rpmbuild --showrc | grep "^compatible archs" | cut -d: -f2`

	if [ -f $updateinf ] ; then
		SUSEPRODUCT="`grep ^Product_Name: $updateinf | head -1`"
		SUSEPRODUCT=${SUSEPRODUCT##Product_Name: }
		SUSEPRODUCT=${SUSEPRODUCT// /}
		if [ "${SUSEPRODUCT:=SuSE-Linux}" = SuSE-Linux ] ; then
			SUSEPRODUCT= # empty suseproduct for non-business products
			return
		else
			SUSEVERSION="`grep ^Product_Version: $updateinf`"
			SUSEVERSION=${SUSEVERSION##Product_Version: }
			SUSEPRODUCT=${SUSEPRODUCT// /-}
		fi
		if [ -z "$SUSEPRODUCT" ] ; then # still not found - guessing time
			SUSEPRODUCT=`head -1 $suserelease`
			if [[ $SUSEPRODUCT != SuSE\ Linux* ]] ; then
				SUSEVERSION=${SUSEPRODUCT##*-}
				SUSEVERSION=${SUSEVERSION%% *}
				SUSEPRODUCT=${SUSEPRODUCT//-*/}
				SUSEPRODUCT=${SUSEPRODUCT// /-}
			else
				SUSEPRODUCT= # it is probably no business product
			fi
		fi
	fi
} # getSuSEVersion

######## main
NODOTSUSEVERSION=foo
getSuSEVersion
test $NODOTSUSEVERSION == foo && \
	NODOTSUSEVERSION=${SUSEVERSION//./} # SuSE version without dots for comparing
if [ "$1" = v1.1 ] ; then
	echo "SuSE-Release-v1.1: $SUSEVERSION $NODOTSUSEVERSION $ARCH \"$SUSEPRODUCT\" `uname -r` `uname -m`"
elif [ "$1" = v1.2 ] ; then
	echo "SuSE-Release-v1.2: $SUSEVERSION $NODOTSUSEVERSION $ARCH \"$SUSEPRODUCT\" `uname -r` `uname -m` ${VALIDARCHS// /+}"
else
	echo "SuSE-Release: $SUSEVERSION $NODOTSUSEVERSION $ARCH $SUSEPRODUCT"
fi
