PEAR is not E_STRICT compliant
[phorkie.git] / build.xml
1 <?xml version="1.0" encoding="utf-8"?>
2 <project name="phorkie" default="zip" basedir=".">
3   <!--
4     phorkie phing build file.
5     This script should provide a one-stop tool for all administrative
6     tasks around phorkie, like creating a release version,
7     tagging a release
8   -->
9   <property file="build.properties" />
10
11   <property name="version-m"  value="0.4" />
12   <property name="version"    value="0.4.0" />
13   <property name="stability"  value="alpha" />
14   <property name="releasenotes" value="
15 Version 0.3.1 - 2012-09-27
16 --------------------------
17 * Check for OpenID package in SetupCheck
18 * Fix bug #24: setupcheck: verify geshi installation
19 * Fix bug #25: setupcheck: verify markdown
20
21 Version 0.3.0 - 2012-09-27
22 --------------------------
23
24 * Fix bug #10: error when nothing submitted [cweiske]
25 * Fix bug #11: do not index edit, delete and tool pages [cweiske]
26 * Fix bug #20: elasticsearch error on deletion [cweiske]
27 * Fix bug #22: Edited pastes not in 'recently created' [cweiske]
28 * Fix bug #23: 'work dir not found' on failed remote fork [cweiske]
29 * Implement request #5: Add OpenID authentication [jnovack]
30 * Implement request #9: autodetect file type [cweiske]
31 * Implement request #12: DOAP and rel='vcs-git' support [cweiske]
32 * Implement request #13: remote forking support [cweiske]
33 * Hide additional file fields by default, button to toggle their visibility
34   [cweiske]
35 * Markdown support [jnovack]
36 * Added nginx rewrite rules to README [skl]
37 " />
38   <property name="zipfile"     value="${phing.project.name}-${version}.tar.bz2" />
39   <property name="pharfile"    value="${phing.dir}/dist/${phing.project.name}-${version}.phar" />
40   <property name="pkgfile"     value="${phing.project.name}-${version}.tgz" />
41   <property name="distfile"    value="dist/${zipfile}" />
42   <property name="distpkgfile" value="dist/pear/${pkgfile}" />
43   <property name="sfproject"   value="phorkie" />
44   <property name="sffilepath"  value="p/ph/phorkie/" />
45
46   <fileset id="fs.zip" dir=".">
47    <include name="data/**"/>
48    <include name="scripts/**"/>
49    <include name="src/**"/>
50    <include name="www/**"/>
51
52    <include name="ChangeLog"/>
53    <include name="LICENSE"/>
54    <include name="NEWS.rst"/>
55    <include name="README.rst"/>
56
57    <exclude name="**/.gitignore/"/>
58    <exclude name="data/config.php"/>
59   </fileset>
60
61   <fileset id="fs.phar" dir="${phing.dir}">
62    <include name="data/**"/>
63    <include name="lib/**"/>
64    <include name="scripts/**"/>
65    <include name="src/**"/>
66    <include name="www/**"/>
67
68    <include name="ChangeLog"/>
69    <include name="README.rst"/>
70
71    <exclude name="data/config.php"/>
72    <exclude name="**/.gitignore/"/>
73    <exclude name="**/.git/"/>
74    <exclude name="lib/geshi/geshi/src/doc/"/>
75    <exclude name="lib/twig/twig/doc/"/>
76    <exclude name="lib/twig/twig/test/"/>
77    <exclude name="lib/pear-pear.php.net/PEAR/bin/"/>
78    <exclude name="lib/pear-pear.php.net/PEAR/PEAR/"/>
79   </fileset>
80
81   <fileset id="fs.doc" dir=".">
82    <include name="README.rst"/>
83    <include name="NEWS.rst"/>
84   </fileset>
85
86   <taskdef name="d51pearpkg2" classname="phing.tasks.ext.d51PearPkg2Task" />
87
88
89   <!-- FIXME: depends="collectdeps" -->
90   <target name="phar"
91           description="Create phar file for release"
92   >
93    <delete file="${pharfile}"/>
94    <pharpackage basedir="${phing.dir}"
95                 destfile="${pharfile}"
96                 stub="${phing.dir}/src/stub-phar.php"
97                 alias="phorkie.phar"
98    >
99     <fileset refid="fs.phar"/>
100    </pharpackage>
101
102    <exec executable="bzip2" dir="${phing.dir}/dist">
103     <arg value="-kf"/>
104     <arg file="${pharfile}"/>
105    </exec>
106   </target>
107
108
109   <target name="zip" depends="check"
110    description="Create zip file for release"
111    >
112     <!--
113       The release file is for end users, so it is safe to
114       remove anything developer-related.
115
116       Test your zip with: unzip -l phorkie-0.1.0.zip
117     -->
118     <echo msg="Creating distribution zip for phorkie ${version}"/>
119     <delete file="${distfile}" failonerror="false"/>
120     <tar compression="bzip2" destfile="${distfile}"
121          prefix="${phing.project.name}-${version}/"
122     >
123      <fileset refid="fs.zip"/>
124     </tar>
125   </target>
126
127
128
129   <target name="package" depends="check"
130    description="Creates the pear package"
131   >
132    <d51pearpkg2 dir="." baseinstalldir="/">
133      <name>phorkie</name>
134      <summary>Self-hosted pastebin software</summary>
135      <description>
136       Self-hosted pastebin software written in PHP.
137       Pastes are editable, may have multiple files and are stored in git repositories.
138      </description>
139      <channel>phorkie.sourceforge.net</channel>
140
141      <lead user="cweiske" name="Christian Weiske" email="cweiske@cweiske.de" />
142      <license>AGPL</license>
143
144      <version   release="${version}"   api="${version}" />
145      <stability release="${stability}" api="${stability}" />
146
147      <notes>${releasenotes}</notes>
148
149      <dependencies>
150        <php minimum_version="5.3.0" />
151        <pear minimum_version="1.9.0" />
152
153        <package name="Date_HumanDiff"
154                 channel="pear.php.net"
155                 minimum_version="0.4.0"
156                 />
157        <package name="HTTP_Request2"
158                 channel="pear.php.net"
159                 minimum_version="2.1.0"
160                 />
161        <package name="OpenID"
162                 channel="pear.php.net"
163                 minimum_version="0.3.3"
164                 />
165        <package name="Pager"
166                 channel="pear.php.net"
167                 minimum_version="2.4.8"
168                 />
169        <package name="Services_Libravatar"
170                 channel="pear.php.net"
171                 minimum_version="0.2.2"
172                 />
173        <package name="VersionControl_Git"
174                 channel="pear.php.net"
175                 minimum_version="0.4.4"
176                 />
177
178        <package name="geshi"
179                 channel="mediawiki.googlecode.com/svn"
180                 minimum_version="1.0.0"
181                 />
182        <package name="Markdown"
183                 channel="pear.michelf.ca"
184                 minimum_version="0.0.2"
185                 />
186        <package name="MIME_Type_PlainDetect"
187                 channel="zustellzentrum.cweiske.de"
188                 minimum_version="0.0.2"
189                 />
190        <package name="Twig"
191                 channel="pear.twig-project.org"
192                 minimum_version="1.6.0"
193                 />
194
195      </dependencies>
196
197      <!-- map directory (key) to role -->
198      <dirroles key="data">data</dirroles>
199      <dirroles key="scripts">data</dirroles>
200      <dirroles key="src">php</dirroles>
201      <dirroles key="www">www</dirroles>
202
203      <!-- do not add the following files to the package.
204           copied from excludes above -->
205      <ignore>**/.gitignore</ignore>
206      <ignore>build*</ignore>
207      <ignore>data/config.php</ignore>
208      <ignore>dist/**</ignore>
209      <ignore>*.properties</ignore>
210      <ignore>*.tgz</ignore>
211
212      <replacement path="www/www-header.php"
213       type="pear-config" from="@data_dir@" to="data_dir"
214       />
215
216
217    </d51pearpkg2>
218
219    <!-- time to fix the package.xml file since the task does not
220         allow everything we need:
221         - strip the base directory names like src, data and www
222         - remove that dumb baseinstalldir from files
223         - md5sums are generated automatically when packaging
224    -->
225    <!-- yes, we need to generate a 2nd file and move it back -->
226    <copy file="package.xml" tofile="package2.xml" overwrite="true">
227     <filterchain>
228      <replaceregexp>
229       <!-- remove md5sums -->
230       <regexp
231        pattern="md5sum=&quot;[a-z0-9]{32}&quot; "
232        replace=""
233        />
234       <!-- remove baseinstalldir for files -->
235       <regexp
236        pattern="&lt;file baseinstalldir=&quot;/&quot;"
237        replace="&lt;file"
238        />
239       <!-- install-as for different directories -->
240       <regexp
241        pattern="(&lt;file name=&quot;data/(.+?)&quot;)"
242        replace="\1 install-as=&quot;\2&quot;"
243        />
244       <regexp
245        pattern="(&lt;file name=&quot;doc/(.+?)&quot;)"
246        replace="\1 install-as=&quot;\2&quot;"
247        />
248       <regexp
249        pattern="(&lt;file name=&quot;tests/(.+?)&quot;)"
250        replace="\1 install-as=&quot;\2&quot;"
251        />
252       <regexp
253        pattern="(&lt;file name=&quot;www/(.+?)&quot;)"
254        replace="\1 install-as=&quot;phorkie/\2&quot;"
255        />
256       <regexp
257        pattern="(&lt;file name=&quot;src/(.+?)&quot;)"
258        replace="\1 install-as=&quot;\2&quot;"
259        />
260      </replaceregexp>
261     </filterchain>
262    </copy>
263    <move file="package2.xml" tofile="package.xml" overwrite="true" />
264
265    <!-- package up -->
266    <exec command="pear package" passthru="true" />
267    <move file="${pkgfile}" todir="dist/pear/" />
268
269    <delete file="package.xml" failonerror="true" />
270   </target>
271
272
273   <target name="build-docs" description="render documentation">
274    <rST format="html" uptodate="true">
275     <fileset refid="fs.doc"/>
276     <mapper type="regexp" from="^(.+?).rst$" to="dist/docs/\1.html"/>
277    </rST>
278   </target>
279
280   <target name="clean-docs" description="delete rendered documentation files">
281    <delete dir="dist/docs" includeemptydirs="yes"/>
282   </target>
283
284
285   <target name="release" depends="check,zip,package,deploy-sf"
286    description="Release the version on sourceforge"
287    >
288    <!-- meta-target -->
289   </target>
290
291
292   <!--
293   /home/frs/project/p/ph/phorkie/phorkie/v0.1/
294   /home/frs/project/p/ph/phorkie/phorkie/v0.1/phorkie-v0.1.0.zip
295   /home/frs/project/p/ph/phorkie/phorkie/v0.1/phorkie-v0.1.1.zip
296   https://sourceforge.net/apps/trac/sourceforge/wiki/Release%20files%20for%20download
297   -->
298   <target name="deploy-sf" depends="check,zip"
299    description="Upload release to sourceforge"
300    >
301     <delete dir="dist/deploy-sf" /><!-- make empty -->
302     <mkdir dir="dist/deploy-sf" />
303     <mkdir dir="dist/deploy-sf/v${version-m}" />
304     <copy file="${distfile}" tofile="dist/deploy-sf/v${version-m}/${zipfile}"/>
305     <!-- test
306     <exec command="rsync -av dist/deploy-sf/ /tmp/test/" escape="false" />
307     -->
308     <exec
309      command="rsync -av -e ssh dist/deploy-sf/ ${sfuser},${sfproject}@frs.sourceforge.net:/home/frs/project/${sffilepath}/${sfproject}/"
310      escape="false" checkreturn="false"
311      />
312     <!-- rsync always returns code 23 on sourceforge releases, so we
313          can't check return values -->
314   </target>
315
316
317   <target name="check"
318    description="Check variables"
319    >
320     <fail unless="version" message="Version not defined!" />
321     <fail unless="sfuser" message="Sourceforge username not defined!" />
322     <fail unless="sfproject" message="Sourceforge project name not defined!" />
323     <fail unless="sffilepath" message="Sourceforge project file path not defined!" />
324
325     <mkdir dir="dist" />
326   </target>
327
328 </project>