<?xml version="1.0"?>
<project name="PHPExcel" default="release-standard" basedir=".">
    <taskdef classname="phing.tasks.ext.d51PearPkg2Task" name="d51pearpkg2"/>

    <target name="gather">
        <if>
            <isfalse value="${packageVersion}"/>
            <then>
                <propertyprompt propertyName="packageVersion" defaultValue="1.0.0"
                                promptText="Enter PHPExcel version number"/>
            </then>
        </if>

        <if>
            <isfalse value="${releaseDate}"/>
            <then>
                <propertyprompt propertyName="releaseDate" defaultValue="2010-01-01"
                                promptText="Enter PHPExcel release date"/>
            </then>
        </if>

        <if>
            <isfalse value="${documentFormat}"/>
            <then>
                <propertyprompt propertyName="documentFormat" defaultValue="doc"
                                promptText="Enter Document Format"/>
            </then>
        </if>
    </target>

    <target name="prepare" depends="gather">
        <echo msg="Creating build directory: ./build"/>
        <mkdir dir="${phing.dir}/build"/>
    </target>

    <target name="build" depends="prepare">
        <echo msg="Copying source files to build directory..."/>

        <copy todir="${phing.dir}/build/Classes" overwrite="true">
            <fileset dir="${phing.dir}/../Classes">
                <include name="**/*"/>
            </fileset>
        </copy>

        <copy todir="${phing.dir}/build/Documentation" overwrite="true">
            <fileset dir="${phing.dir}/../Documentation">
                <include name="*.${documentFormat}"/>
                <include name="*.txt"/>
            </fileset>
        </copy>
        <mkdir dir="${phing.dir}/build/Documentation/API"/>

        <copy todir="${phing.dir}/build/Documentation/Examples" overwrite="true">
            <fileset dir="${phing.dir}/../Documentation/Examples">
                <include name="**/*"/>
                <exclude name="assets"/>
            </fileset>
        </copy>

        <copy todir="${phing.dir}/build/unitTests" overwrite="true">
            <fileset dir="${phing.dir}/../unitTests">
                <include name="**/*"/>
            </fileset>
        </copy>

        <copy file="${phing.dir}/../changelog.txt" tofile="${phing.dir}/build/changelog.txt" overwrite="true"/>
        <copy file="${phing.dir}/../license.md" tofile="${phing.dir}/build/license.txt" overwrite="true"/>
        <copy file="${phing.dir}/../install.txt" tofile="${phing.dir}/build/install.txt" overwrite="true"/>
    </target>

    <target name="versionNumber" depends="build">
        <reflexive>
            <fileset dir="${phing.dir}/build">
                <include pattern="**/*"/>
            </fileset>
            <filterchain>
                <replaceregexp>
                    <regexp pattern="##VERSION##" replace="${packageVersion}"/>
                    <regexp pattern="##DATE##" replace="${releaseDate}"/>
                </replaceregexp>
            </filterchain>
        </reflexive>

        <reflexive>
            <fileset dir="${phing.dir}/build">
                <include pattern="**/changelog.txt"/>
            </fileset>
            <filterchain>
                <replaceregexp>
                    <regexp pattern="Fixed in SVN" replace="${releaseDate} (v${packageVersion})"/>
                </replaceregexp>
            </filterchain>
        </reflexive>
    </target>

    <target name="apidocs" depends="versionNumber">
        <echo msg="Generating API documentation..."/>
        <phpdoc title="PHPExcel classes"
                destdir="${phing.dir}/build/Documentation/API"
                sourcecode="true"
                output="HTML:Smarty:PHP"
                defaultcategoryname="PHPExcel"
                defaultpackagename="PHPExcel"
                pear="true">
            <fileset dir="${phing.dir}/build/Classes">
                <include name="**/*.php"/>
            </fileset>
        </phpdoc>
    </target>

    <target name="release-standard" depends="apidocs">
        <mkdir dir="${phing.dir}/release"/>

        <echo msg="Creating release package (v${packageVersion} with ${documentFormat} documents)..."/>
        <zip destfile="${phing.dir}/release/PHPExcel_${packageVersion}_${documentFormat}.zip">
            <fileset dir="${phing.dir}/build">
                <include name="**/*"/>
            </fileset>
        </zip>

        <echo msg="Cleaning build directory: ./build"/>
        <delete dir="${phing.dir}/build"/>
    </target>

    <target name="release-phar" depends="versionNumber">
        <mkdir dir="${phing.dir}/release"/>

        <echo msg="Creating PHAR release package (v${packageVersion})..."/>
        <pharpackage destfile="${phing.dir}/release/PHPExcel_${packageVersion}.phar" basedir="${phing.dir}/build/Classes" compression="gzip" stub="${phing.dir}/PharStub.php">
            <fileset dir="${phing.dir}/build/Classes">
                <include name="**/**" />
            </fileset>
            <metadata>
                <element name="version" value="${packageVersion}" />
                <element name="date" value="${releaseDate}" />
                <element name="description" value="A pure PHP library for reading and writing spreadsheet files" />
                <element name="authors">
                    <element name="Mark Baker">
                        <element name="e-mail" value="mbaker@inviqa.com" />
                    </element>
                </element>
            </metadata>
        </pharpackage>

        <echo msg="Cleaning build directory: ./build"/>
        <delete dir="${phing.dir}/build"/>
    </target>

    <target name="release-pear" depends="versionNumber">
        <mkdir dir="${phing.dir}/release"/>

        <echo msg="Creating PEAR release package (v${packageVersion})..."/>

        <d51pearpkg2 dir="${phing.dir}/build/Classes" baseinstalldir="PHPExcel">
            <name>PHPExcel</name>
            <summary>PHP Excel classes</summary>
            <channel>pear.pearplex.net</channel>
            <description>Project providing a set of classes for the PHP programming language, which allow you to write
                to Excel 2007 files and read from Excel 2007 files.
            </description>
            <notes>This package ONLY contains the class files, not the documentation and example code. Please refer to
                http://www.codeplex.com/PHPExcel for those files.
            </notes>
            <lead user="maartenba" name="Maarten Balliauw" email="maarten@phpexcel.net"/>
            <license uri="http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt">LGPL</license>
            <version release="${packageVersion}" api="${packageVersion}"/>
            <stability release="stable" api="stable"/>
            <dependencies>
                <php minimum_version="5.2.0"/>
                <pear minimum_version="1.4.0"/>
                <extension name="zip" minimum_version="1.8.0"/>
            </dependencies>
            <dirroles key="PHPExcel/Shared/PDF/fonts">data</dirroles>
            <dirroles key="PHPExcel/Shared/PDF/fonts/utils">data</dirroles>
            <dirroles key="/PHPExcel/Shared/PDF/fonts/utils">data</dirroles>
        </d51pearpkg2>

        <exec command="pear package ${phing.dir}/build/Classes/package.xml"/>
        <move file="PHPExcel-${packageVersion}.tgz" tofile="${phing.dir}/release/PHPExcel-${packageVersion}.tgz" overwrite="true"/>

        <echo msg="Cleaning build directory: ./build"/>
        <delete dir="${phing.dir}/build"/>
    </target>

    <target name="release-documentation">
        <mkdir dir="${phing.dir}/release"/>

        <echo msg="Creating documentation release (v${packageVersion} with ${documentFormat} documents)..."/>
        <copy todir="${phing.dir}/build" overwrite="true">
            <fileset dir="${phing.dir}/../Documentation">
                <include name="*.${documentFormat}"/>
                <include name="*.txt"/>
            </fileset>
        </copy>
        <copy todir="${phing.dir}/build/Examples" overwrite="true">
            <fileset dir="${phing.dir}/../Documentation/Examples">
                <include name="**/*"/>
            </fileset>
        </copy>

        <echo msg="Creating documentation release package (v${packageVersion} with ${documentFormat} documents)..."/>
        <zip destfile="${phing.dir}/release/PHPExcel_${packageVersion}-documentation_${documentFormat}.zip">
            <fileset dir="${phing.dir}/build">
                <include name="**/*"/>
            </fileset>
        </zip>

        <echo msg="Cleaning build directory: ./build"/>
        <delete dir="${phing.dir}/build"/>
    </target>
</project>