<?xml version="1.0" encoding="UTF-8"?>

<project name="phpMyAdmin" default="build" basedir=".">
 <property name="source" value="."/>
 <property name="source_comma_sep" value="."/>
 <property environment="env"/>
 <property name="env.PHPUNIT_XML" value="phpunit.xml.dist"/>
 <property name="env.PHPUNIT_XML_NOCOVERAGE" value="phpunit.xml.nocoverage"/>
 <property name="env.PHPUNIT_XML_HHVM" value="phpunit.xml.hhvm"/>
 <property name="env.PHPUNIT_ARGS" value=""/>

 <target name="clean" description="Clean up and create artifact directories">
  <delete dir="${basedir}/build/api"/>
  <delete dir="${basedir}/build/code-browser"/>
  <delete dir="${basedir}/build/coverage"/>
  <delete dir="${basedir}/build/logs"/>
  <delete dir="${basedir}/build/pdepend"/>

  <mkdir dir="${basedir}/build/api"/>
  <mkdir dir="${basedir}/build/code-browser"/>
  <mkdir dir="${basedir}/build/coverage"/>
  <mkdir dir="${basedir}/build/logs"/>
  <mkdir dir="${basedir}/build/pdepend"/>
 </target>

 <target name="phpunit" description="Run unit tests using PHPUnit and generates junit.xml and clover.xml">
  <exec executable="${basedir}/vendor/bin/phpunit" failonerror="true">
      <arg line="--configuration ${env.PHPUNIT_XML} ${env.PHPUNIT_ARGS}"/>
  </exec>
 </target>

 <target name="phpunit-nocoverage" description="Run unit tests using PHPUnit and generates junit.xml">
  <exec executable="${basedir}/vendor/bin/phpunit" failonerror="true">
      <arg line="--configuration ${env.PHPUNIT_XML_NOCOVERAGE} ${env.PHPUNIT_ARGS}"/>
  </exec>
 </target>

 <target name="phpunit-hhvm" description="Run unit tests using PHPUnit with HHVM specific config">
  <exec executable="${basedir}/vendor/bin/phpunit" failonerror="true">
      <arg line="--configuration ${env.PHPUNIT_XML_HHVM} ${env.PHPUNIT_ARGS}"/>
  </exec>
 </target>

 <target name="pdepend" description="Generate jdepend.xml and software metrics charts using PHP_Depend">
  <exec executable="pdepend">
   <arg line="'--jdepend-xml=${basedir}/build/logs/jdepend.xml'
              '--jdepend-chart=${basedir}/build/pdepend/dependencies.svg'
              '--overview-pyramid=${basedir}/build/pdepend/overview-pyramid.svg'
              ${source_comma_sep}" />
  </exec>
 </target>

 <target name="phpmd" description="Generate pmd.xml using PHPMD">
  <exec executable="phpmd">
   <arg line="${source_comma_sep}
              xml
              codesize,design,naming,unusedcode
              --exclude test,build,tcpdf,php-gettext,bfShapeFiles,phpseclib,recaptchalib.php,vendor,sql-parser
              --reportfile '${basedir}/build/logs/pmd.xml'" />
  </exec>
 </target>

 <target name="phpcpd" description="Generate pmd-cpd.xml using PHPCPD">
  <exec executable="phpcpd">
   <arg line="--log-pmd '${basedir}/build/logs/pmd-cpd.xml'
              --exclude test
              --exclude build
              --exclude vendor
              --exclude libraries/tcpdf
              --exclude libraries/php-gettext
              --exclude libraries/bfShapeFiles
              --exclude libraries/phpseclib
              --exclude libraries/plugins/auth/recaptcha/recaptchalib.php
              --exclude libraries/sql-parser
              ${source}" />
  </exec>
 </target>

 <target name="phploc" description="Generate phploc.csv">
  <exec executable="phploc">
   <arg line="--log-csv '${basedir}/build/logs/phploc.csv'
              --exclude test
              --exclude build
              --exclude vendor
              --exclude libraries/tcpdf
              --exclude libraries/php-gettext
              --exclude libraries/bfShapeFiles
              --exclude libraries/phpseclib
              --exclude libraries/plugins/auth/recaptcha/recaptchalib.php
              --exclude libraries/sql-parser
              ${source}" />
  </exec>
 </target>

 <target name="phpcs-config" description="PHPCS configuration tweaking">
  <exec executable="phpcs">
   <arg line="--config-set installed_paths ${basedir}/vendor/phpmyadmin/coding-standard" />
  </exec>
 </target>

 <target name="phpcs" description="Generate checkstyle.xml using PHP_CodeSniffer excluding third party libraries" depends="phpcs-config">
  <exec executable="phpcs">
   <arg line="
              --ignore=*/php-gettext/*,*/vendor/*,*/tcpdf/*,*/canvg/*,*/codemirror/*,*/openlayers/*,*/jquery/*,*/jqplot/*,*/build/*,*/bfShapeFiles/*,*/phpseclib/*,*/recaptcha/*,*/sql-parser/*
              --report=checkstyle
              --extensions=php
              --report-file='${basedir}/build/logs/checkstyle.xml'
              --standard=PMAStandard
              ${source}" />
  </exec>
 </target>

 <target name="phpdoc" description="Generate API documentation using PHPDocumentor">
  <exec executable="phpdoc">
   <arg line="-d ${source} -t '${basedir}/build/api'" />
  </exec>
 </target>

 <target name="phpcb" description="Aggregate tool output with PHP_CodeBrowser">
  <exec executable="phpcb">
   <arg line="--log    '${basedir}/build/logs'
              --source '${source}'
              --output '${basedir}/build/code-browser'" />
  </exec>
 </target>

<target name="jshint" description="Javascript checks">
  <apply executable="jshint" output="${basedir}/build/logs/jshint-jslint.xml"  parallel="true">
   <arg line="--config ./.jshintrc --reporter=jslint" />
   <fileset dir="${basedir}">
    <include name="js/pmd/*.js" />
    <include name="js/*.js" />
    <include name="setup/*.js" />
   </fileset>
  </apply>
 </target>

 <target name="jshint-checkstyle" description="Javascript checks">
  <apply executable="jshint" output="${basedir}/build/logs/jshint-checkstyle.xml"  parallel="true">
   <arg line="--config ./.jshintrc --reporter=checkstyle" />
   <fileset dir="${basedir}">
    <include name="js/pmd/*.js" />
    <include name="js/*.js" />
    <include name="setup/*.js" />
   </fileset>
  </apply>
 </target>

 <target name="locales" description="Generate locales">
   <exec executable="./scripts/generate-mo" failonerror="true">
     <arg line="--quiet" />
   </exec>
 </target>

 <target name="lint" description="Perform syntax check of sourcecode files">
  <apply executable="php" failonerror="true">
   <arg value="-l" />

   <fileset dir="${basedir}">
    <include name="libraries/**/*.php" />
    <include name="templates/**/*.phtml" />
    <include name="setup/**/*.php" />
    <include name="test/**/*.php" />
    <include name="*.php" />
    <modified />
   </fileset>
  </apply>
 </target>

 <target name="build" depends="clean,phpunit,pdepend,phpmd,phpcpd,phpcs,phpdoc,phploc,phpcb,lint,jshint,locales"/>
</project>
