#!/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" REPOSIT="cvs.erp5.org" # TODO: The spec repository should be moved from /ERP5/spec to /spec/Mandriva 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 while test $# -gt 0; do #################### # Build the archive from the cvs files #################### 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@$REPOSIT:/cvsroot checkout $NAME && cd - VERSION=`awk '{print $2}' $CVS_PATH/$NAME/VERSION.txt` 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.tar.bz2 TMP_SPEC="/tmp/$NAME-$VERSION-tmp.spec" rm -f $TMP_SPEC touch $TMP_SPEC #################### # Get data from the previous spec file commited in the CVS #################### # 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@$REPOSIT:/cvsroot checkout $SPEC_REPOSITORY/$NAME.spec CVS_SPEC_FILE="$CVS_PATH/$SPEC_REPOSITORY/$NAME.spec" # Get summary and required packages SUMMARY=`grep "^Summary*" $CVS_SPEC_FILE` REQUIRES=`grep "^Requires*" $CVS_SPEC_FILE` # Get the doc DOC=`grep "^%doc*" $CVS_SPEC_FILE` # Default value for %doc if not found in previous spec file if test "x$DOC" = x; then DOC="%doc %{product}/VERSION.txt" fi # Get the description and changelog from the previous 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 - 1` 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"` # Increase the rpm release number if needed PREVIOUS_VERSION=`grep "^%define version*" $CVS_SPEC_FILE | awk '{print $3}'` PREVIOUS_REL=`grep "^%define release*" $CVS_SPEC_FILE | awk '{print $3}'` if test "x$VERSION" = "x$PREVIOUS_VERSION"; then RELEASE=`expr $PREVIOUS_REL + 1` else RELEASE="1" fi MKREL=`rpm --with unstable --eval "%mkrel $RELEASE"` #################### # Build the spec file using the following template #################### echo "%define product $NAME %define version $VERSION %define release $RELEASE %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 #---------------------------------------------------------------------- %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 %{software_home}/Products/* #---------------------------------------------------------------------- %changelog * $TODAY $PACKAGER <$EMAIL> $VERSION-$MKREL - $LOG_MSG $CHANGELOG" >> $TMP_SPEC # 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 echo "-------------" echo "Please commit the new $NAME.spec file in the Nexedi repository (http://$REPOSIT)" echo "-------------" done exit 0