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

<project name="joomla" default="build" basedir=".">
	<property name="source" value="." />
	<property name="joomlasource" value="administrator,cli,components,includes,installation,language/en-GB,libraries/cms,modules,plugins,templates" />

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

		<mkdir dir="${basedir}/build/api" />
		<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}/libraries/vendor/bin/phpunit">
			<arg value="-d" />
			<arg value="zend.enable_gc=0" />
		</exec>
	</target>

	<target name="parallelTasks" description="Run the pdepend, phpmd and phpcs tasks in parallel using a maximum of 2 threads.">
		<parallel threadCount="2">
			<sequential>
				<antcall target="pdepend" />
				<antcall target="phpmd" />
			</sequential>
			<antcall target="phpcs" />
		</parallel>
	</target>

	<target name="phpcs" description="Generate checkstyle.xml using PHP_CodeSniffer">
		<exec executable="phpcs">
			<arg value="--report=checkstyle" />
			<arg value="--extensions=php" />
			<arg value="-p" />
			<arg value="--report-file=${basedir}/build/logs/checkstyle.xml" />
			<arg value="--standard=${basedir}/build/phpcs/Joomla" />
			<arg path="${source}" />
		</exec>
	</target>

	<target name="pdepend" description="Generate jdepend.xml and software metrics charts using PHP_Depend">
		<exec executable="pdepend">
			<arg value="--jdepend-xml=${basedir}/build/logs/jdepend.xml" />
			<arg value="--jdepend-chart=${basedir}/build/pdepend/dependencies.svg" />
			<arg value="--overview-pyramid=${basedir}/build/pdepend/overview-pyramid.svg" />
			<arg value="--ignore=build,tests" />
			<arg path="${source}" />
		</exec>
	</target>

	<target name="installdep" description="Install build dependencies using composer">
		<exec executable="composer">
			<arg value="update" />
			<arg value="--no-dev" />
		</exec>
	</target>

	<target name="phpmd" description="Generate pmd.xml using PHPMD">
		<exec executable="phpmd">
			<arg path="${joomlasource}" />
			<arg value="xml" />
			<arg value="${basedir}/build/phpmd.xml" />
			<arg value="--reportfile" />
			<arg value="${basedir}/build/logs/pmd.xml" />
		</exec>
	</target>

	<target name="phpdoc" description="Generate API documentation using phpDocumentor">
		<exec executable="phpdoc">
			<arg value="-i" />
			<arg path="${basedir}/libraries/vendor/joomla/*/Tests/,${basedir}/libraries/vendor/joomla/string/src/phputf8/,${basedir}/libraries/vendor/composer/,${basedir}/libraries/vendor/joomla/event/vendor/,${basedir}/libraries/vendor/joomla/session/Joomla/Session/_Tests/,${basedir}/libraries/vendor/joomla/session/Joomla/Session/Tests/,${basedir}/libraries/idna_convert/" />
			<arg value="-d" />
			<arg path="${basedir}/libraries/cms/,${basedir}/libraries/joomla/,${basedir}/libraries/legacy/,${basedir}/libraries/src/,${basedir}/libraries/vendor/joomla/" />
			<arg value="-f" />
			<arg path="${basedir}/libraries/loader.php" />
			<arg value="-t" />
			<arg path="${basedir}/build/api/" />
			<arg value="--template" />
			<arg value="joomla" />
			<arg value="--title" />
			<arg value="Joomla! CMS 3.8 API" />
		</exec>
	</target>

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

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

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

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

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

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

			<fileset dir="${basedir}/language/en-GB">
				<include name="**/*.php" />
				<modified />
			</fileset>

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

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

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

	<target name="make-updatecomponent" description="Create an installable package from the com_joomlaupdate component" >
		<delete dir="${basedir}/build/com_joomlaupdate-pkg" includeemptydirs="true" failonerror="false" />
		<mkdir dir="${basedir}/build/com_joomlaupdate-pkg" />
		<echo message="Create com_joomlaupdate package" />
		<mkdir dir="${basedir}/build/com_joomlaupdate-pkg/staging" />
		<mkdir dir="${basedir}/build/com_joomlaupdate-pkg/staging/admin" />
		<copy todir="${basedir}/build/com_joomlaupdate-pkg/staging/admin">
			<fileset dir="${basedir}/administrator/components/com_joomlaupdate" />
		</copy>
		<move file="${basedir}/build/com_joomlaupdate-pkg/staging/admin/joomlaupdate.xml" todir="${basedir}/build/com_joomlaupdate-pkg/staging" />
		<echo message="Copy the media folder" />
		<copy todir="${basedir}/build/com_joomlaupdate-pkg/staging/media/js">
			<fileset dir="${basedir}/media/com_joomlaupdate/js" />
		</copy>
		<echo message="Copy language files" />
		<mkdir dir="${basedir}/build/com_joomlaupdate-pkg/staging/admin/language" />
		<copyfile src="${basedir}/administrator/language/en-GB/en-GB.com_joomlaupdate.ini" dest="${basedir}/build/com_joomlaupdate-pkg/staging/admin/language/en-GB.com_joomlaupdate.ini"/>
		<copyfile src="${basedir}/administrator/language/en-GB/en-GB.com_joomlaupdate.sys.ini" dest="${basedir}/build/com_joomlaupdate-pkg/staging/admin/language/en-GB.com_joomlaupdate.sys.ini"/>
		<echo message="Archiving package" />
		<mkdir dir="${basedir}/build/com_joomlaupdate-pkg/packages" />
		<zip destfile="${basedir}/build/com_joomlaupdate-pkg/packages/com_joomlaupdate.zip" basedir="${basedir}/build/com_joomlaupdate-pkg/staging" />
	</target>

	<target name="build" depends="clean,phpunit,parallelTasks" />
</project>
