<?xml version="1.0" encoding="UTF-8"?>
<project name="phpcpd" default="build">
 <target name="build" depends="prepare,lint,phpcs,phpunit"/>

 <target name="clean" description="Cleanup build artifacts">
  <delete dir="${basedir}/vendor"/>
  <delete file="${basedir}/composer.lock"/>
  <delete file="${basedir}/composer.phar"/>
  <delete dir="${basedir}/build/phar"/>
  <delete dir="${basedir}/build/SebastianBergmann"/>
  <delete file="${basedir}/build/LICENSE"/>
  <delete file="${basedir}/build/README.md"/>
  <delete file="${basedir}/build/phpcpd.bat"/>
  <delete file="${basedir}/build/phpcpd.php"/>
  <delete>
   <fileset dir="${basedir}/build" includes="*.phar"/>
   <fileset dir="${basedir}/build" includes="*.tgz"/>
  </delete>
 </target>

 <target name="prepare" depends="clean,phpab" description="Prepare for build">
 </target>

 <target name="phpab" description="Generate autoloader scripts">
  <exec executable="phpab">
   <arg value="--output" />
   <arg path="src/autoload.php" />
   <arg value="--template" />
   <arg path="src/autoload.php.in" />
   <arg value="--indent" />
   <arg value="              " />
   <arg path="src" />
  </exec>
 </target>

 <target name="lint">
  <apply executable="php" failonerror="true">
   <arg value="-l" />

   <fileset dir="${basedir}/src">
    <include name="**/*.php" />
    <modified />
   </fileset>

   <fileset dir="${basedir}/tests">
    <include name="**/*.php" />
    <modified />
   </fileset>
  </apply>
 </target>

 <target name="phpcs" description="Find coding standard violations using PHP_CodeSniffer">
  <exec executable="phpcs">
   <arg value="--standard=PSR2" />
   <arg value="--extensions=php" />
   <arg value="--ignore=autoload.php" />
   <arg path="${basedir}/src" />
  </exec>
 </target>

 <target name="phpunit" description="Run unit tests with PHPUnit">
  <exec executable="phpunit" failonerror="true">
   <arg value="--configuration" />
   <arg path="${basedir}/build/phpunit.xml" />
  </exec>
 </target>

 <target name="pear">
  <mkdir dir="${basedir}/build/SebastianBergmann/PHPCPD"/>

  <copy todir="${basedir}/build/SebastianBergmann/PHPCPD">
   <fileset dir="${basedir}/src"/>
  </copy>

  <copy file="LICENSE" todir="${basedir}/build"/>
  <copy file="README.md" todir="${basedir}/build"/>
  <copy file="phpcpd.bat" todir="${basedir}/build"/>
  <copy file="phpcpd.php" todir="${basedir}/build"/>

  <exec executable="pear" dir="${basedir}/build">
   <arg value="package" />
  </exec>

  <delete dir="${basedir}/build/SebastianBergmann"/>
  <delete file="${basedir}/build/LICENSE"/>
  <delete file="${basedir}/build/README.md"/>
  <delete file="${basedir}/build/phpcpd.bat"/>
  <delete file="${basedir}/build/phpcpd.php"/>
 </target>

 <target name="phar"
         description="Create PHAR archive of PHPCPD and all its dependencies"
         depends="clean">
  <mkdir dir="${basedir}/build/phar"/>

  <exec executable="bash" outputproperty="version">
   <arg value="-c" />
   <arg value="${basedir}/phpcpd.php --version | awk 'BEGIN { ORS = &quot;&quot;; } {print $2}'" />
  </exec>

  <get src="https://getcomposer.org/composer.phar" dest="${basedir}/composer.phar"/>

  <exec executable="php">
   <arg value="composer.phar"/>
   <arg value="install"/>
  </exec>

  <copy todir="${basedir}/build/phar/src">
   <fileset dir="${basedir}/src">
    <include name="**/*.php" />
    <exclude name="**/autoload.php" />
   </fileset>
  </copy>

  <copy todir="${basedir}/build/phar/finder-facade">
   <fileset dir="${basedir}/vendor/sebastian/finder-facade/src">
    <include name="**/*.php" />
    <exclude name="**/autoload.php" />
   </fileset>
  </copy>

  <copy todir="${basedir}/build/phar/version">
   <fileset dir="${basedir}/vendor/sebastian/version/src">
    <include name="**/*.php" />
    <exclude name="**/autoload.php" />
   </fileset>
  </copy>

  <copy todir="${basedir}/build/phar/php-timer">
   <fileset dir="${basedir}/vendor/phpunit/php-timer/PHP">
    <include name="**/*.php" />
    <exclude name="**/Autoload.php" />
   </fileset>
  </copy>

  <copy todir="${basedir}/build/phar/symfony">
   <fileset dir="${basedir}/vendor/symfony">
    <include name="**/*.php" />
    <exclude name="**/Tests/**" />
   </fileset>
  </copy>

  <copy todir="${basedir}/build/phar/fdomdocument">
   <fileset dir="${basedir}/vendor/theseer/fdomdocument/src"/>
  </copy>

  <exec executable="phpab">
   <arg value="--all" />
   <arg value="--phar" />
   <arg value="--output" />
   <arg path="${basedir}/build/phpcpd-${version}.phar" />
   <arg value="--template" />
   <arg path="${basedir}/build/phar-autoload.php.in" />
   <arg value="--indent" />
   <arg value="            " />
   <arg path="${basedir}/build/phar" />
  </exec>

  <chmod file="${basedir}/build/phpcpd-${version}.phar" perm="ugo+rx"/>

  <delete dir="${basedir}/build/phar"/>
  <delete dir="${basedir}/vendor"/>
  <delete file="${basedir}/composer.lock"/>
  <delete file="${basedir}/composer.phar"/>
 </target>
</project>
