#!/bin/sh
#
# postfix-get-distribution - Simple script to determine the correct
# distribution, in the form <distribution>-<major>.<minor>
#
# - there appears to be no clear way of doing this which is cross platform
#   compatible between different rpm vendors
#
# With rh9 the return value of rpm -q redhat-release does not include a
# minor version.  This is used in several places in make-postfix.spec so we
# generate a minor version of 0 if necessary.
#
# Recognised distributions so far are:
# - RedHat Linux
# - RedHat Enterprise Linux
# - Fedora
# - YellowDog Linux
# - Whitebox Linux (reports as RedHat Enterprise Linux for building)
# - Mandrake Linux

# Provide a usage message
function usage () {

version=$(echo '$Revision: 1.2.2.16 $' | sed -e 's/^.*: //g' -e 's/ .*$//g')
cat <<EOF
`basename $0` Version $version

Copyright (C) 2002-2004 - Simon J Mudd <sjmudd@pobox.com>
This program may be freely redistributed under the terms of the GNU GPL

Usage: `basename $0` [--help] [--distribution] [--name] [--major] [--minor] [--full]

Shows the distribution name or one of several different components:
--distribution	<name>-<major>.<minor>		[default behaviour]
--name		redhat, rhel, yellowdoy, ... (abbreviated format)
--major		major version (3, 5, 6, 7, 8)
--minor		minor version (0, ...) [ may have decimal values ]
--full		Redhat-Release-X.Y, Whitebox-Release-X.Y, ...
--debug		show all values
EOF
}

info=distribution
if [ -n "$1" ]; then
    case $1 in
    --distribution)	info=distribution;;
    --name)		info=name;;
    --major)		info=major;;
    --minor)		info=minor;;
    --full)		info=full;;
    --debug)		info=debug;;
    --help)		usage; exit 0;;
    *)			usage; exit 1;;
    esac
fi

# default values
full="unknown-release-?.?"
name=unknown
release=0.0
major=0
minor=0
#
# Get release information (if possible)
#
if [ `rpm -q redhat-release >/dev/null 2>&1; echo $?` = 0 ]; then
    # This means we are RHL <= 9 OR enterprise linux
    # redhat-release-3ES-1
    # redhat-release-2.9.5AS-7 (taroon beta)
    # redhat-release-9-3
    # redhat-release-8.0-8
    # redhat-release-7.2-1
    # redhat-release-6.2-1
    rpmname=redhat-release
    full=`rpm -q ${rpmname}`
    if [ -n "`rpm -q ${rpmname} | egrep '(ES|ES|AS|WS)'`" ];
    then
        name=rhel
    else
        name=redhat
    fi
    release=`rpm -q ${rpmname} | sed -e "s;^${rpmname}-;;" -e 's;-[0-9]*$;;' \
                                         -e 's;[EWA]S;;'`
elif [ `rpm -q whitebox-release >/dev/null 2>&1; echo $?` = 0 ]; then
    # whitebox SHOULD behave like rhel
    rpmname=whitebox-release
    full=`rpm -q ${rpmname}`
    name=centos	# compatibility with RedHat Enterprise Linux
    release=`rpm -q ${rpmname} | sed -e "s;^${rpmname}-;;" -e 's;-[0-9]*$;;'`
elif [ `rpm -q centos-release >/dev/null 2>&1; echo $?` = 0 ]; then
    # centos SHOULD behave like rhel
    rpmname=centos-release
    full=`rpm -q ${rpmname}`
    name=centos   # compatibility with RedHat Enterprise Linux
    release=`rpm -q ${rpmname} | sed -e "s;^${rpmname}-;;" -e 's;-[0-9]*$;;'`
elif [ `rpm -q fedora-release >/dev/null 2>&1; echo $?` = 0 ]; then
    rpmname=fedora-release
    full=`rpm -q ${rpmname}`
    name=fedora
    release=`rpm -q ${rpmname} | sed -e "s;^${rpmname}-;;" -e 's;-[0-9]*$;;'`
elif [ `rpm -q redhat-release-es >/dev/null 2>&1; echo $?` = 0 ]; then
    rpmname=redhat-release-es
    full=`rpm -q ${rpmname}`
    name=rhel
    release=`rpm -q ${rpmname} | sed -e "s;^${rpmname}-;;" -e 's;[A-Z]*-[0-9]*$;;'`
elif [ `rpm -q redhat-release-as >/dev/null 2>&1; echo $?` = 0 ]; then
    rpmname=redhat-release-as
    full=`rpm -q ${rpmname}`
    name=rhel
    release=`rpm -q ${rpmname} | sed -e "s;^${rpmname}-;;" -e 's;[A-Z]*-[0-9]*$;;'`
elif [ `rpm -q mandrake-release >/dev/null 2>&1; echo $?` = 0 ]; then
    rpmname=mandrake-release
    full=`rpm -q ${rpmname}`
    name=mandrake
    release=`rpm -q ${rpmname} | sed -e "s;^${rpmname}-;;" -e 's;-[0-9]*mdk$;;'`
elif [ `rpm -q yellowdog-release >/dev/null 2>&1; echo $?` = 0 ]; then
    rpmname=yellowdog-release
    full=`rpm -q ${rpmname}`
    name=yellowdog
    release=`rpm -q ${rpmname} | sed -e "s;^${rpmname}-;;" -e 's;-[0-9]*$;;'`
fi

# from release determine the major and minor versions
echo $release | grep -q '\.' && {
    # there's one or more '.'s in release (e.g. 8.0 OR 2.9.5)
    major=`echo $release | sed -e 's;\.[0-9.]*$;;'`
    minor=`echo $release | sed -e 's;^[0-9]*\.;;'`
} || {
    # there's no '.' in release (e.g. 9)
    major=$release
}

case $info in
distribution)
    echo ${name}-${major}.${minor};;
name)
    echo ${name};;
major)
    echo ${major};;
minor)
    echo ${minor};;
full)
    echo ${full};;
debug)
    echo name=$name
    echo release=$release
    echo major=$major
    echo minor=$minor
    echo full=$full
    ;;
*)
    echo "Internal error info=$info" >&2
    exit 1
esac
