build-spec 5.19 KB
Newer Older
Jean-Paul Smets's avatar
Jean-Paul Smets committed
1 2 3 4 5 6
#!/bin/bash

PARAMS=1

# Where we can find the RPM directory
# and where we want to store the source code from cvs
7 8
CVS_PATH="/home/$USER/cvs"
RPM_PATH="/home/$USER/rpm"
9
REPOSIT="cvs.erp5.org"
10

11
# TODO: The spec repository should be moved from /ERP5/spec to /spec/Mandriva in the CVS
12 13 14 15 16 17 18 19
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"

Jean-Paul Smets's avatar
Jean-Paul Smets committed
20

21
if [ $# -lt "$PARAMS" ]
Jean-Paul Smets's avatar
Jean-Paul Smets committed
22 23
then
  echo
24
  echo "build-spec PACKAGE_NAME..."
Jean-Paul Smets's avatar
Jean-Paul Smets committed
25
  exit 0
26 27
fi

28

29
while test $# -gt 0; do
30 31 32 33 34

  ####################
  # Build the archive from the cvs files
  ####################

Jean-Paul Smets's avatar
Jean-Paul Smets committed
35
  NAME=$1
36 37
  shift
  echo Starting Building $NAME
38

39
  # Retrieve the version in the source code as anonymous user to be sure we get published code only
40
  cd $CVS_PATH && cvs -d:pserver:anonymous@$REPOSIT:/cvsroot checkout $NAME && cd -
Jean-Paul Smets's avatar
Jean-Paul Smets committed
41 42 43
  VERSION=`awk '{print $2}' $CVS_PATH/$NAME/VERSION.txt`
  echo Building --$NAME-- Version --$VERSION--
  rm -rf $CVS_PATH/$NAME-$VERSION/
44
  mkdir -p $CVS_PATH/$NAME-$VERSION
Jean-Paul Smets's avatar
Jean-Paul Smets committed
45
  cp -a $CVS_PATH/$NAME $CVS_PATH/$NAME-$VERSION
46 47
  # Remove CVS extra files
  find $CVS_PATH/$NAME-$VERSION/* -name "CVS" | xargs rm -rf
48

49 50 51 52
  # 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
53
  rm -f $RPM_PATH/SOURCES/$NAME-$VERSION.tar.bz2
54
  cp $CVS_PATH/$NAME-$VERSION.tar.bz2 $RPM_PATH/SOURCES/$NAME-$VERSION.tar.bz2
55 56 57 58 59

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

60 61 62 63 64

  ####################
  # Get data from the previous spec file commited in the CVS
  ####################

65 66
  # 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
67
  cd $CVS_PATH && cvs -d:pserver:anonymous@$REPOSIT:/cvsroot checkout $SPEC_REPOSITORY/$NAME.spec
68 69
  CVS_SPEC_FILE="$CVS_PATH/$SPEC_REPOSITORY/$NAME.spec"

70
  # Get summary and required packages
71
  SUMMARY=`grep "^Summary*" $CVS_SPEC_FILE`
72 73 74 75 76 77 78 79
  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
80

81
  # Get the description and changelog from the previous spec file
82 83 84 85 86 87 88
  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`
89
  CLOG_TAIL=`expr $L_TOTAL - $L_CHANGELOG - 1`
90 91 92 93 94 95

  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"`

96 97 98 99 100 101 102 103 104 105
  # 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"`

Kevin Deldycke's avatar
Kevin Deldycke committed
106 107 108
  # TODO: get the %post section from the CVS spec file
  # TODO: write a generic code to get sections from the CVS spec file

Kevin Deldycke's avatar
Kevin Deldycke committed
109

110 111 112 113
  ####################
  # Build the spec file using the following template
  ####################

114
  echo "%define product $NAME
115
%define version $VERSION
116
%define release $RELEASE
117 118 119

%define zope_home %{_prefix}/lib/zope
%define software_home %{zope_home}/lib/python
Jean-Paul Smets's avatar
Jean-Paul Smets committed
120

121 122 123 124 125 126 127 128 129 130
$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
131
$REQUIRES
132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164

#----------------------------------------------------------------------
%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)
165
$DOC
166 167 168 169
%{software_home}/Products/*

#----------------------------------------------------------------------
%changelog
170
* $TODAY $PACKAGER <$EMAIL> $VERSION-$MKREL
171 172
- $LOG_MSG

173
$CHANGELOG" >> $TMP_SPEC
Jean-Paul Smets's avatar
Jean-Paul Smets committed
174 175

  # now we can replace the spec file
176
  rm -f $RPM_PATH/SPECS/$NAME.spec
177
  cp -f $TMP_SPEC $RPM_PATH/SPECS/$NAME.spec
Jean-Paul Smets's avatar
Jean-Paul Smets committed
178

179
  #rpmbuild -ba $RPM_PATH/SPECS/$NAME.spec
Jean-Paul Smets's avatar
Jean-Paul Smets committed
180

181 182 183 184
  echo "-------------"
  echo "Please commit the new $NAME.spec file in the Nexedi repository (http://$REPOSIT)"
  echo "-------------"

185
done
Jean-Paul Smets's avatar
Jean-Paul Smets committed
186 187

exit 0