#!/bin/bash

PARAMS=1

# Where we can find the RPM directory
# and where we want to store the source code from cvs
CVS_PATH="/home/$USER/cvs"
RPM_PATH="/home/$USER/rpm"

# TODO: The spec repository should be moved from /ERP5/spec to /spec in the CVS
SPEC_REPOSITORY="ERP5/spec"


# Those variables are used to build the change log
PACKAGER="Kevin Deldycke"
EMAIL="kevin@nexedi.com"
LOG_MSG="New build from the CVS"


if [ $# -lt "$PARAMS" ]
then
  echo
  echo "build-spec PACKAGE_NAME..."
  exit 0
fi

# Because we get the CVS version, we have to include the date in the revision number
CVSDATE=`date +'%Y%m%d'`

while test $# -gt 0; do
  NAME=$1
  shift
  echo Starting Building $NAME
  # Retrieve the version in the source code as anonymous user to be sure we get published code only
  cd $CVS_PATH && cvs -d:pserver:anonymous@cvs.erp5.org:/cvsroot checkout $NAME && cd -
  VERSION=`awk '{print $2}' $CVS_PATH/$NAME/VERSION.txt`
  VERSION=$VERSION.$CVSDATE
  echo Building --$NAME-- Version --$VERSION--
  rm -rf $CVS_PATH/$NAME-$VERSION/
  mkdir -p $CVS_PATH/$NAME-$VERSION
  cp -a $CVS_PATH/$NAME $CVS_PATH/$NAME-$VERSION
  # Remove CVS extra files
  find $CVS_PATH/$NAME-$VERSION/* -name "CVS" | xargs rm -rf
  # Create the archive
  cd $CVS_PATH/$NAME-$VERSION && tar jcvf $NAME-$VERSION.tar.bz2 $NAME && cd -
  mv $CVS_PATH/$NAME-$VERSION/$NAME-$VERSION.tar.bz2 $CVS_PATH/
  # Remove because this does not remove files
  rm -f $RPM_PATH/SOURCES/$NAME-$VERSION.tar.bz2
  cp $CVS_PATH/$NAME-$VERSION.tar.bz2 $RPM_PATH/SOURCES/$NAME-$VERSION.$CVSDATE.tar.bz2

  TMP_SPEC="/tmp/$NAME-$VERSION-tmp.spec"
  rm -f $TMP_SPEC
  touch $TMP_SPEC

  # Now we will regenerate a spec file skeleton based on the one stored in the CVS.
  # This spec file need to be modified by hand to get
  cd $CVS_PATH && cvs -d:pserver:anonymous@cvs.erp5.org:/cvsroot checkout $SPEC_REPOSITORY/$NAME.spec
  CVS_SPEC_FILE="$CVS_PATH/$SPEC_REPOSITORY/$NAME.spec"

  # Get sumary, description and changelog from the previous spec file
  SUMMARY=`grep "^Summary*" $CVS_SPEC_FILE`

  L_SECTIONS=`grep -hn "#----------------------------------------------------------------------" $CVS_SPEC_FILE | sed -e "s/:/ /g" | awk '{print $1}'`
  L_DESC_START=`echo $L_SECTIONS | awk '{print $1}'`
  L_DESC_STOP=` echo $L_SECTIONS | awk '{print $2}'`
  L_CHANGELOG=` echo $L_SECTIONS | awk '{print $3}'`
  L_TOTAL=`wc -l $CVS_SPEC_FILE | awk '{print $1}'`
  DESC_HEAD=`expr $L_DESC_STOP - 1`
  DESC_TAIL=`expr $L_DESC_STOP - $L_DESC_START - 2`
  CLOG_TAIL=`expr $L_TOTAL - $L_CHANGELOG - 2`

  DESCRIPTION=`head -n $DESC_HEAD $CVS_SPEC_FILE | tail -n $DESC_TAIL`
  CHANGELOG=`tail -n $CLOG_TAIL $CVS_SPEC_FILE`

  TODAY=`env LC_TIME=en date +"%a %b %d %Y"`

  # Generate the spec file
  echo "
%define product $NAME
%define version $VERSION
# If we get the code from the CVS, the release will be always the first
%define release 1

%define zope_home %{_prefix}/lib/zope
%define software_home %{zope_home}/lib/python

$SUMMARY
Name:      zope-%{product}
Version:   %{version}
Release:   %mkrel %{release}
License:   GPL
Group:     System/Servers
URL:       http://www.erp5.org
Source0:   %{product}-%{version}.tar.bz2
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-rootdir
BuildArch: noarch
Requires:  zope-erp5

#----------------------------------------------------------------------
%description
$DESCRIPTION

#----------------------------------------------------------------------
%prep
%setup -c

%build


%install
%{__rm} -rf %{buildroot}
%{__mkdir_p} %{buildroot}/%{software_home}/Products
%{__cp} -a * %{buildroot}%{software_home}/Products/


%clean
%{__rm} -rf %{buildroot}

%post
if [ \"\`%{_prefix}/bin/zopectl status\`\" != \"daemon manager not running\" ] ; then
  service zope restart
fi

%postun
if [ -f \"%{_prefix}/bin/zopectl\" ] && [ \"\`%{_prefix}/bin/zopectl status\`\" != \"daemon manager not running\" ] ; then
  service zope restart
fi

%files
%defattr(0644, root, root, 0755)
%doc VERSION.txt
%{software_home}/Products/*

#----------------------------------------------------------------------
%changelog
* $TODAY $PACKAGER <$EMAIL> $VERSION-1mdk
- $LOG_MSG

$CHANGELOG
"

  # now we can replace the spec file
  rm -f $RPM_PATH/SPECS/$NAME.spec
  cp -f $TMP_SPEC $RPM_PATH/SPECS/$NAME.spec

  #rpmbuild -ba $RPM_PATH/SPECS/$NAME.spec

done

exit 0