#! /bin/sh
# $Copyright$
# Copyright (C) Fujitsu Technology Solutions 2009
# All rights reserved
#
# $Copyright$
# Copyright (C) Fujitsu Siemens Computers GmbH 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009
# All rights reserved
#
# ident "$Header$"

# Copyright (C) Fujitsu Siemens Computers 2004
# All Rights Reserved.
#
# /etc/srvmagt/sources/srvmagt_buildpackage
# Script to build the binaries RPM "srvmagt-mods_bin"

# Init logging.
# NOTE: All log files are rotated.

#source ServerView function library
. /etc/srvmagt/functions

# set ServerView Environment
SetSvEnv

MYHOME="/etc/srvmagt"
LOGFILE=/tmp/buildpackage.log

# Step 1.
# Use the SV_SYSTEM environment variable to identify the Linux distribution
#
# RedHat:
# 	Red Hat Enterprise Linux AS release 3 (Taroon)
# SuSE:
# 	Welcome to SuSE SLES 8 (powered by UnitedLinux 1.0) (i586)
# VMware:
# 	VMware ESX Server 2.0.1
#
# My source RPM's version and the version of the tools used on the reference
# system to build the binaries go into the binaries RPM for a compatibility check.


KERNEL=$(uname -r)
MACHINE=$(uname -m)

SRC_RPM="srvmagt-mods_src"
set $(rpm -q --queryformat '%{VERSION} %{RELEASE}' $SRC_RPM)
VERSION=$1
RELEASE=$2
BIN_RPM="srvmagt-mods_bin-${VERSION}-${RELEASE}.${MACHINE}.rpm"

log "Building $BIN_RPM for kernel $KERNEL on $MACHINE."

case $SV_SYSTEM in
	redhat)	REF_TOOLS="gawk gcc binutils glibc-devel make";;
	suse)	REF_TOOLS="gawk kernel-source gcc binutils glibc-devel make";;
	vmware) REF_TOOLS=$(rpm -q --queryformat '[%{REQUIRENAME}\n]' $SRC_RPM | /bin/egrep -v '/bin|rpmlib');;
esac

REF_TOOLS_VERS=$(rpm -q --queryformat '%{NAME}-%{VERSION}-%{RELEASE}; ' $REF_TOOLS)

# Step 2.
# Setup my build environment relative to MYHOME
# Establish my RPM macros while including the default RPM macros

RPM_RPMDIR="${MYHOME}/rpms"
RPM_BUILDIR="${MYHOME}/build"
RPM_MODULES="${RPM_BUILDIR}/lib/modules/$KERNEL/srvmagt"
RPM_SCRIPTS="${RPM_BUILDIR}/etc/init.d"
RPM_HOMEAGT="${RPM_BUILDIR}/etc/srvmagt"
RPM_SOURCES="${RPM_BUILDIR}/etc/srvmagt/sources"

mkdir -p $RPM_RPMDIR
mkdir -p $RPM_BUILDIR
mkdir -p $RPM_MODULES
mkdir -p $RPM_SCRIPTS
mkdir -p $RPM_SOURCES

echo "\
%_topdir      $MYHOME
%_builddir    $RPM_BUILDIR
%_rpmdir      $RPM_RPMDIR
%_specdir     $RPM_RPMDIR
%buildroot    $RPM_BUILDIR
%ref_kernel   $KERNEL
%build_arch   $MACHINE
%_rpmfilename %%{NAME}-%%{VERSION}-%%{RELEASE}.${MACHINE}.rpm" >$RPM_RPMDIR/srvmagt.macros

echo "macrofiles: $RPM_RPMDIR/srvmagt.macros" >$RPM_RPMDIR/srvmagt.rpmrc

# Step 3.
# Establish all necessary files and directories in my build environment

cp /lib/modules/$KERNEL/srvmagt/* $RPM_MODULES
cp $MYHOME/sources/mods_bin_start.sh $RPM_SCRIPTS/eecd_mods_bin
# cp $MYHOME/sources/*.rpm $RPM_SOURCES
install -D -m 644 $MYHOME/config $RPM_HOMEAGT/config
install -D -m 700 $MYHOME/testOpenIpmi $RPM_HOMEAGT/testOpenIpmi
install -D -m 700 $MYHOME/functions $RPM_HOMEAGT/functions
[ -f "$MYHOME/edacModule" ] && touch $RPM_HOMEAGT/edacModule && chmod 644 $RPM_HOMEAGT/edacModule

# Step 4.
# Setup all files in the %files section in the spec file skeleton

SPECFILE="$RPM_RPMDIR/srvmagt-mods_bin.spec"
SPECSKELETON="$MYHOME/sources/srvmagt-modules_skeleton.spec"
FILELIST="/tmp/srvmagt_bin.fls"
find $RPM_BUILDIR \( -type f -o -type l \) >$FILELIST

awk -v release="$RELEASE" \
	-v version="$VERSION" \
	-v toolsused="$REF_TOOLS_VERS" \
	-v rpmbuild="$RPM_BUILDIR" \
	-v filelist="$FILELIST" '
	BEGIN {
		# Get the file list
		fileno = 0
		while (0 < (getline files[fileno] < filelist))
			fileno++
		close(filelist)
		dist = (length(rpmbuild) + 1)
	}

	/^@Version@/	{ print "Version     : " version; next}
	/^@Release@/	{ print "Release     : " release; next}
	/^@ToolsUsed@/	{ print "Built using : " toolsused; next}
	/^@Filelist@/	{
		for (f in files) {
			if (files[f] ~ /init.d/)
				attr = "744"
			else if (files[f] ~ /testOpenIpmi$/)
				attr = "744"
			else if (files[f] ~ /rc.d/)
				attr = "777"	# this is a symb. link!
			else
				attr = "644"

			printf ("%%attr(%s, root, root) %s\n", attr, substr(files[f], dist))
		}
		next
	}
	{print}
' $SPECSKELETON >$SPECFILE

# Now do the build.
# Determine whether to use rpm(8) or rpmbuild(8) (from rpm 4.x onward)

RPMBUILD=rpmbuild
RPM_VERSION=$(rpm --version | awk -F "[ .]" '{print $3}')
if [ $RPM_VERSION -lt 4 ]; then
	RPMBUILD=rpm
fi

sysRpmrc=""
[ -f "/usr/lib/rpm/$SV_SYSTEM/rpmrc" ] && sysRpmrc="/usr/lib/rpm/$SV_SYSTEM/rpmrc:"

$RPMBUILD -bb \
	--rcfile /usr/lib/rpm/rpmrc:$sysRpmrc$RPM_RPMDIR/srvmagt.rpmrc \
	--buildroot $RPM_BUILDIR \
	--sign $SPECFILE \
	$SPECFILE >>$LOGFILE 2>&1 
	rpmbuildrc=$?
	logger -t $MYNAME -f $LOGFILE
	[ $rpmbuildrc -ne 0 ] && exit 1

echo "$BIN_RPM"

log "Building $BIN_RPM succeeded"
exit 0
# EOF
