<project name="Lucterios2_lib" default="all" basedir=".">
	<property name="core.path" value="${basedir}/../lct-core" />
	<property name="project.test.source" value="" />
	<property name="project.test.omit" value="*/management/commands/*,test/*,*/virt/lib/*,manage_test.py" />
	<property name="project.test.include" value="" />
	<property name="project.test.instance" value="test" />
	<property name="project.packagepath" value="" />
	<property name="project.packagename" value="" />
	<property name="project.packname" value="" />
	<property name="project.name" value="" />
	<property name="project.pythonpath" value="${env.PYTHONPATH}" />
	<property name="project.modules" value="" />
	<property name="project.appli" value="lucterios.standard" />
	<property environment="env" />

	<taskdef resource="net/sf/antcontrib/antlib.xml">
		<classpath>
			<pathelement location="/usr/share/java/lib/ant-contrib-0.6.jar" />
		</classpath>
	</taskdef>

	<if>
		<available file="${basedir}/../virt/bin/python" />
		<then>
			<property name="project.pythonexe" value="${basedir}/../virt/bin/python" />
		</then>
		<else>
			<property name="project.pythonexe" value="python3" />
		</else>
	</if>

	<target name="all">
		<antcall target="clear" />
		<antcall target="init" />
		<antcall target="pep8" />
		<antcall target="radon" />
		<antcall target="add_instance" />
		<antcall target="i18n" />
		<antcall target="docs" />
		<antcall target="package" />
		<antcall target="tests" />
		<antcall target="del_instance" />
	</target>

	<target name="clear">
		<delete dir="dist" />
		<delete dir="${project.test.instance}" />
		<delete file="manage_${project.test.instance}.py" />
		<delete file="coverage2.xml" />
		<delete file="coverage3.xml" />
		<delete file="junit_py0.xml" />
		<delete file="junit_py2.xml" />
		<delete file="junit_py3.xml" />
		<delete file="*.version" />
		<delete file="MANIFEST" />
		<delete>
			<fileset dir="." includes="**/*.pyc" excludes="virt/**/*.pyc" />
		</delete>
		<delete dir="*/__pycache__" />
		<for param="packageitem" list="${project.packagepath}">
			<sequential>
				<basename property="module_name" file="@{packageitem}" />
				<delete dir="${basedir}/@{packageitem}/docs/build_fr" />
				<delete dir="${basedir}/@{packageitem}/docs/build_en" />
				<delete dir="${basedir}/@{packageitem}/static/${module_name}/doc_fr" />
				<delete dir="${basedir}/@{packageitem}/static/${module_name}/doc_en" />
			</sequential>
		</for>

	</target>

	<target name="init_addon">
	</target>

	<target name="init">
		<echo message="python = ${project.pythonexe}" />
		<exec executable="/bin/bash" outputproperty="build.tstmp" failifexecutionfails="false" errorproperty="">
			<arg line="-c 'git log -1 --format=%at'" />
		</exec>
		<exec executable="${project.pythonexe}" outputproperty="build.num" failifexecutionfails="false" errorproperty="">
			<arg value="-c" />
			<arg value="import datetime;print(datetime.datetime.fromtimestamp(int('${build.tstmp}')).strftime('%y%m%d%H'))" />
		</exec>
		<tstamp>
			<format property="build.time" pattern="yyMMddHH" unit="hour" />
		</tstamp>
		<property name="projet.version.build" value="${build.num}" />
		<echo message="git:${build.num}-time:${build.time}" file="${project.name}-git_${build.num}-time_${build.time}.version" append="false" />
		<for param="packageitem" list="${project.packagepath}">
			<sequential>
				<echo message="${projet.version.build}" file="${basedir}/@{packageitem}/build" append="false" />
			</sequential>
		</for>
		<echo message='&lt;testsuite errors="0" failures="0" name="null test" skips="0" tests="0" time="0"&gt;&lt;/testsuite&gt;' file="junit_py0.xml" append="false" />
		<antcall target="init_addon">
			<param name="build_number" value="${projet.version.build}" />
		</antcall>
	</target>

	<target name="pep8">
		<exec executable="${project.pythonexe}">
			<arg line="-m" />
			<arg line="pycodestyle" />
			<arg line="--ignore=E501" />
			<arg line="${project.name}" />
			<redirector output="pep8_results.txt" />
		</exec>
		<exec executable="cat">
			<arg line="pep8_results.txt" />
		</exec>
	</target>

	<target name="radon">
		<basename property="currentname" file="${basedir}"/>
		<exec executable="${project.pythonexe}" dir="${basedir}/..">
			<arg line="-m radon cc -n C -a -s ${currentname}" />
			<redirector output="radon_results.txt" />
		</exec>
		<exec executable="cat">
			<arg line="radon_results.txt" />
		</exec>
	</target>

	<target name="i18n_comp">
		<echo message="-- extract ${sub_path} --" />
		<exec executable="${project.pythonexe}" dir="${sub_path}" failonerror="true">
			<env key="PYTHONPATH" value="${project.pythonpath}" />
			<arg value="${basedir}/manage_${project.test.instance}.py" />
			<arg value="makemessages" />
			<arg value="-l" />
			<arg value="fr" />
			<arg value="-l" />
			<arg value="en" />
		</exec>
	</target>

	<target name="i18n_build">
		<echo message="-- compile --" />
		<exec executable="${project.pythonexe}" dir="${basedir}" failonerror="true">
			<env key="PYTHONPATH" value="${project.pythonpath}" />
			<arg value="${basedir}/manage_${project.test.instance}.py" />
			<arg value="compilemessages" />
		</exec>
	</target>

	<target name="i18n">
		<if>
			<available file="${basedir}/manage_${project.test.instance}.py" />
			<then />
			<else>
				<antcall target="add_instance" />
			</else>
		</if>

		<for param="packageitem" list="${project.packagepath}">
			<sequential>
				<antcall target="i18n_comp">
					<param name="sub_path" value="${basedir}/@{packageitem}" />
				</antcall>
			</sequential>
		</for>
		<antcall target="i18n_build" />
	</target>

	<target name="add_instance">
		<exec executable="${project.pythonexe}">
			<env key="PYTHONPATH" value="${basedir}:${project.pythonpath}" />
			<arg value="${core.path}/lucterios/install/lucterios_admin.py" />
			<arg value="add" />
			<arg value="--name=${project.test.instance}" />
			<arg value="--appli=${project.appli}" />
			<arg value="--module=${project.modules}" />
			<arg value="--instance_path=${basedir}" />
		</exec>
	</target>

	<target name="del_instance">
		<exec executable="${project.pythonexe}" failonerror="true">
			<env key="PYTHONPATH" value="${basedir}:${project.pythonpath}" />
			<arg value="${core.path}/lucterios/install/lucterios_admin.py" />
			<arg value="delete" />
			<arg value="--name=${project.test.instance}" />
			<arg value="--instance_path=${basedir}" />
		</exec>
	</target>

	<target name="test_addon">
	</target>
	
	<target name="tests">
		<echo message='&lt;testsuite errors="0" failures="0" name="null test" skips="0" tests="0" time="0"&gt;&lt;/testsuite&gt;' file="junit_py3.xml" append="false" />
		<echo message="-- test with coverage3 --" />
		<delete dir="pdf" />
		<delete file=".coverage" />
		<delete file="coverage.xml" />
		<delete file="coverage3.xml" />
		<exec executable="${project.pythonexe}" dir="${basedir}">
			<arg line="-m coverage erase" />
		</exec>
		<exec executable="${project.pythonexe}" dir="${basedir}">
			<env key="PYTHONPATH" value="${project.pythonpath}" />
			<arg line="-m coverage run --branch --source=${project.test.source} --omit=${project.test.omit} ${basedir}/manage_${project.test.instance}.py test ${project.packagename}" />
		</exec>
		<antcall target="test_addon" />
		<exec executable="${project.pythonexe}" dir="${basedir}">
			<arg line="-m coverage report" />
		</exec>
		<exec executable="${project.pythonexe}" dir="${basedir}">
			<arg line="-m coverage xml" />
		</exec>
		<move file="coverage.xml" tofile="coverage3.xml" />
		<replaceregexp file="coverage3.xml" match='name="\..*\.lucterios' replace='name="lucterios' byline="true" />
		<replaceregexp file="coverage3.xml" match='name="\..*\.diacamma' replace='name="diacamma' byline="true" />
		<replace file="coverage3.xml" token='filename="${project.name}' value='filename="${basedir}/${project.name}' />
		<replaceregexp file="coverage3.xml" match="&lt;source&gt;.*&lt;/source&gt;" replace="&lt;source&gt;/&lt;/source&gt;" byline="true" />
		<replace file="${basedir}/junit_py3.xml" token="${project.name}." value="${project.name}-py3." />
	</target>

	<target name="docs_comp">
		<property name="sub_path" value="${basedir}/${packageitem}" />
		<if>
			<available file="${sub_path}/docs/${lang}" />
			<then>
				<property name="module_name_" value="${packageitem}" />
				<loadresource property="module_name">
					<propertyresource name="module_name_" />
					<filterchain>
						<tokenfilter>
							<replaceregex pattern="/" replace="\." flags="g" />
						</tokenfilter>
					</filterchain>
				</loadresource>
				<basename property="module_name" file="${sub_path}" />
				<tstamp>
					<format property="currentyear" pattern="yyyy" unit="hour" />
				</tstamp>
				<echo message="-- doc ${sub_path} / lang ${lang} / module ${module_name} / ${packlongversion} / ${packshortversion} --" />
				<delete dir="${sub_path}/docs/build_${lang}" />
				<delete dir="${sub_path}/static/${module_name}/doc_${lang}" />
				<mkdir dir="${sub_path}/static/${module_name}/doc_${lang}" />
				<replaceregexp file="${sub_path}/docs/${lang}/conf.py" match="copyright = '.*'" replace="copyright = '${currentyear}, sd-libre'" byline="true" />
				<replaceregexp file="${sub_path}/docs/${lang}/conf.py" match="author = '.*'" replace="author = 'sd-libre'" byline="true" />
				<replaceregexp file="${sub_path}/docs/${lang}/conf.py" match="version = '.*'" replace="version = '${packshortversion}'" byline="true" />
				<replaceregexp file="${sub_path}/docs/${lang}/conf.py" match="release = '.*'" replace="release = '${packlongversion}'" byline="true" />
				<replaceregexp file="${sub_path}/docs/${lang}/conf.py" match="html_theme = '.*'" replace="html_theme = 'haiku'" byline="true" />
				<replaceregexp file="${sub_path}/docs/${lang}/conf.py" match="language = '.*'" replace="language = '${lang}'" byline="true" />
				<exec executable="make" dir="${sub_path}/docs/${lang}" failonerror="true">
					<env key="PATH" value="${basedir}/../virt/bin:${env.PATH}"/>				
					<arg value="html" />
				</exec>
				<move file="${sub_path}/docs/build_${lang}/html" tofile="${sub_path}/static/${module_name}/doc_${lang}" />
			</then>
		</if>
	</target>

	<target name="docs_pdf">
		<property name="sub_path" value="${basedir}/${packageitem}" />
		<if>
			<available file="${sub_path}/pdf/${lang}" />
			<then>
				<property name="module_name_" value="${packageitem}" />
				<loadresource property="module_name">
					<propertyresource name="module_name_" />
					<filterchain>
						<tokenfilter>
							<replaceregex pattern="/" replace="\." flags="g" />
						</tokenfilter>
					</filterchain>
				</loadresource>
				<basename property="module_name" file="${sub_path}" />
				<tstamp>
					<format property="currentyear" pattern="yyyy" unit="hour" />
				</tstamp>
				<echo message="-- doc ${sub_path} / lang ${lang} / module ${module_name} / ${packmiddleversion} / ${packshortversion} --" />
				<delete dir="${sub_path}/pdf/build_${lang}" />
				<replaceregexp file="${sub_path}/pdf/${lang}/conf.py" match="copyright = '.*'" replace="copyright = '${currentyear}, sd-libre'" byline="true" />
				<replaceregexp file="${sub_path}/pdf/${lang}/conf.py" match="author = '.*'" replace="author = 'sd-libre'" byline="true" />
				<replaceregexp file="${sub_path}/pdf/${lang}/conf.py" match="version = '.*'" replace="version = '${packshortversion}'" byline="true" />
				<replaceregexp file="${sub_path}/pdf/${lang}/conf.py" match="release = '.*'" replace="release = '${packmiddleversion}'" byline="true" />
				<replaceregexp file="${sub_path}/pdf/${lang}/conf.py" match="html_theme = '.*'" replace="html_theme = 'haiku'" byline="true" />
				<replaceregexp file="${sub_path}/pdf/${lang}/conf.py" match="language = '.*'" replace="language = '${lang}'" byline="true" />
				<exec executable="make" dir="${sub_path}/pdf/${lang}" failonerror="true">
					<env key="PATH" value="${basedir}/../virt/bin:${env.PATH}"/>				
					<arg value="clean" />
					<arg value="latexpdf" />
				</exec>
			</then>
		</if>
	</target>

	<target name="docs">
		<for param="packageitem" list="${project.packagepath}">
			<sequential>
				<loadfile property="build_file" srcfile="@{packageitem}/build" />
				<loadfile property="init_file" srcfile="@{packageitem}/__init__.py" />

				<for param="line" delimiter="${line.separator}" list="${init_file}">
					<sequential>
						<propertyregex property="packversion" input="@{line}" regexp="__version__\s*=\s*.([0-9\.]+)" select="\1" />
						<propertyregex property="packmiddleversion" input="@{line}" regexp="__version__\s*=\s*.([0-9]+\.[0-9]+\.[0-9]+)" select="\1" />
						<propertyregex property="packshortversion" input="@{line}" regexp="__version__\s*=\s*.([0-9]+\.[0-9]+)" select="\1" />
					</sequential>
				</for>
				<var name="packlongversion" value="${packversion}${build_file}" />
				<antcall target="docs_comp">
					<param name="basedir" value="${basedir}" />
					<param name="packageitem" value="@{packageitem}" />
					<param name="lang" value="fr" />
					<param name="packlongversion" value="${packlongversion}" />
					<param name="packshortversion" value="${packshortversion}" />
				</antcall>
				<antcall target="docs_comp">
					<param name="basedir" value="${basedir}" />
					<param name="packageitem" value="@{packageitem}" />
					<param name="lang" value="en" />
					<param name="packlongversion" value="${packlongversion}" />
					<param name="packshortversion" value="${packshortversion}" />
				</antcall>

				<antcall target="docs_pdf">
					<param name="basedir" value="${basedir}" />
					<param name="packageitem" value="@{packageitem}" />
					<param name="lang" value="fr" />
					<param name="packmiddleversion" value="${packmiddleversion}" />
					<param name="packshortversion" value="${packshortversion}" />
				</antcall>
				<antcall target="docs_pdf">
					<param name="basedir" value="${basedir}" />
					<param name="packageitem" value="@{packageitem}" />
					<param name="lang" value="en" />
					<param name="packmiddleversion" value="${packmiddleversion}" />
					<param name="packshortversion" value="${packshortversion}" />
				</antcall>

			</sequential>
		</for>
	</target>

	<target name="package_del">
		<delete dir="${project.packname}" />
	</target>

	<target name="package">
		<delete file="MANIFEST" />
		<exec executable="${project.pythonexe}" failonerror="true">
			<arg value="setup.py" />
			<arg value="sdist" />
			<arg value="bdist_wheel" />
		</exec>
		<delete dir="${basedir}/build" />
		<antcall target="package_del" />
		<move todir="dist">
			<fileset dir=".">
				<include name="*.version" />
			</fileset>
		</move>
	</target>

</project>
