<?xml version="1.0" encoding="utf-8"?>
<project name="GeSHi" default="pack" basedir=".">
  <!--
    GeSHi - Generic Syntax Highlighter - phing build file.
    Works for 1.0.x
    Packs up a new version of geshi, tags it in git and releases it on
    sourceforge.net
  -->
  <property file="build.properties" />

  <property name="version"    value="1.0.9.0" />
  <property name="stability"  value="stable" />
  <property name="zipfile"    value="${phing.project.name}-${version}.zip" />
  <property name="gzfile"     value="${phing.project.name}-${version}.tar.gz" />
  <property name="bz2file"    value="${phing.project.name}-${version}.tar.bz2" />
  <property name="pkgfile"    value="geshi-${version}.tgz" />
  <property name="fileprefix" value="geshi/" />
  <property name="sfproject"  value="GeSHi" />
  <property name="sffilepath" value="g/ge/geshi/" />

  <property name="releasenotes" value="
Version 1.0.9.0
" />


  <fileset dir="src" id="files">
   <include name="**"/>
   <exclude name="**/.gitignore/"/>
  </fileset>

  <fileset dir="." id="extra">
   <include name="contrib/**"/>
   <include name="docs/**"/>
  </fileset>

  <taskdef name="d51pearpkg2" classname="phing.tasks.ext.d51PearPkg2Task" />



  <target name="pack" depends=""
   description="Create zip and tar files for release"
   >
    <mkdir dir="dist" />
    <echo msg="Creating distribution files for ${phing.project.name} ${version}"/>

    <delete file="dist/${zipfile}" failonerror="false"/>
    <delete file="dist/${gzfile}" failonerror="false"/>
    <delete file="dist/${bz2file}" failonerror="false"/>

    <zip destfile="dist/${zipfile}" prefix="${fileprefix}">
     <fileset refid="files" />
     <fileset refid="extra" />
    </zip>
    <tar destfile="dist/${gzfile}" prefix="${fileprefix}" compression="gzip">
     <fileset refid="files" />
     <fileset refid="extra" />
    </tar>
    <tar destfile="dist/${bz2file}" prefix="${fileprefix}" compression="bzip2">
     <fileset refid="files" />
     <fileset refid="extra" />
    </tar>
  </target>



  <target name="pack-pear" depends=""
   description="Creates the PEAR package"
  >
   <mkdir dir="dist/pear" />
   <delete file="src/package.xml" failonerror="false" />
   <d51pearpkg2 dir="src" baseinstalldir="/">
     <name>geshi</name>
     <summary>Generic syntax highlighter, written in PHP.</summary>
     <description>
      GeSHi is a generic syntax highlighter, written in PHP. You simply
      input the source code you wish to highlight with the language you
      wish to use, and the output will be a file syntax highlighted to
      XHTML standards.
     </description>
     <channel>pear.geshi.org</channel>

     <lead user="benbe" name="Benny Baumann" email="benbe@geshi.org" />
     <license>AGPL</license>

     <version   release="${version}"   api="${version}" />
     <stability release="${stability}" api="${stability}" />

     <notes>${releasenotes}</notes>

     <dependencies>
       <php minimum_version="5.3.0" />
       <pear minimum_version="1.9.0" />
     </dependencies>

     <!-- map directory (key) to role -->
     <dirroles key="src">.</dirroles>

     <ignore>**/.gitignore</ignore>
     <ignore>contrib/**</ignore>
     <ignore>dist/**</ignore>
     <ignore>docs/**</ignore>
     <ignore>*.properties</ignore>
     <ignore>*.tgz</ignore>
   </d51pearpkg2>
   <!-- time to fix the package.xml file since the task does not
        allow everything we need:
        - strip the base directory names like src, data and www
        - remove that dumb baseinstalldir from files
        - md5sums are generated automatically when packaging
   -->
   <!-- yes, we need to generate a 2nd file and move it back -->
   <copy file="src/package.xml" tofile="src/package2.xml" overwrite="true">
    <filterchain>
     <replaceregexp>
      <!-- remove md5sums -->
      <regexp
       pattern="md5sum=&quot;[a-z0-9]{32}&quot; "
       replace=""
       />
      <!-- remove baseinstalldir for files -->
      <regexp
       pattern="&lt;file baseinstalldir=&quot;/&quot;"
       replace="&lt;file"
       />
      <!-- install-as for different directories -->
      <regexp
       pattern="(&lt;file name=&quot;data/(.+?)&quot;)"
       replace="\1 install-as=&quot;\2&quot;"
       />
      <regexp
       pattern="(&lt;file name=&quot;doc/(.+?)&quot;)"
       replace="\1 install-as=&quot;\2&quot;"
       />
      <regexp
       pattern="(&lt;file name=&quot;tests/(.+?)&quot;)"
       replace="\1 install-as=&quot;\2&quot;"
       />
      <regexp
       pattern="(&lt;file name=&quot;www/(.+?)&quot;)"
       replace="\1 install-as=&quot;phorkie/\2&quot;"
       />
      <regexp
       pattern="(&lt;file name=&quot;src/(.+?)&quot;)"
       replace="\1 install-as=&quot;\2&quot;"
       />
     </replaceregexp>
    </filterchain>
   </copy>
   <move file="src/package2.xml" tofile="src/package.xml" overwrite="true" />

   <!-- package up -->
   <exec command="pear package" passthru="true" dir="src" />
   <move file="src/${pkgfile}" todir="${phing.dir}/dist/pear/" />

   <delete file="src/package.xml" failonerror="true" />
  </target>



  <target name="release" depends="check,pack,pack-pear,deploy-sf,gittag"
   description="Release the version on sourceforge"
   >
   <!-- meta-target -->
  </target>


  <!--
  https://sourceforge.net/apps/trac/sourceforge/wiki/Release%20files%20for%20download
  -->
  <target name="deploy-sf" depends="check,pack"
   description="Upload release to sourceforge"
   >
    <delete dir="dist/deploy-sf" /><!-- make empty -->
    <mkdir dir="dist/deploy-sf" />
    <mkdir dir="dist/deploy-sf/geshi" />
    <mkdir dir="dist/deploy-sf/geshi/GeSHi ${version}" />
    <copy todir="dist/deploy-sf/geshi/GeSHi ${version}/">
     <fileset dir="dist">
      <include name="${zipfile}" />
      <include name="${gzfile}" />
      <include name="${bz2file}" />
     </fileset>
    </copy>
    <!-- test
    <exec command="rsync -av dist/deploy-sf/ /tmp/test/" escape="false" />
    -->
    <exec
     command="rsync -av -e ssh dist/deploy-sf/ ${sfuser},${sfproject}@frs.sourceforge.net:/home/frs/project/${sffilepath}/${sfproject}/"
     escape="false" checkreturn="false"
     />

    <!-- rsync always returns code 23 on sourceforge releases, so we
         can't check return values -->
  </target>


  <target name="gittag"
   description="create the git tag for the current version"
   >
    <exec
     command="git tag v${version}'"
     escape="false" checkreturn="true"
     />
  </target>


  <target name="check"
   description="Check variables"
   >
    <fail unless="version" message="Version not defined!" />
    <fail unless="sfuser" message="Sourceforge username not defined!" />
    <fail unless="sfproject" message="Sourceforge project name not defined!" />
    <fail unless="sffilepath" message="Sourceforge project file path not defined!" />
  </target>

</project>
