<project name="hotel" default="zip" basedir=".">
    
    <description>Measure Conversion Code Coverage</description>
    
    <property name="fwd.home"             value="." />
    <property name="app.4gl.src"          value="./abl/" />
    <property name="fwd.src.home"         value="${fwd.home}/p2j/src" />
    <property name="app.4gl.src"          value="./abl/" />
    <property name="app.4gl.pattern"      value="*.[pPwW]" />
    <property name="fwd.lib.home"         value="${fwd.home}/p2j/build/lib" />
    <property name="deploy.home"          value="${basedir}/deploy" />
    <property name="fwd.build.home"       value="${fwd.home}/p2j/build" />
    <property name="zfile"                value="zfile_set.txt" />
    <property name="p2j.home"             value="." />
    <property name="p2jlib.home"          value="${p2j.home}/p2j/build/lib" />

    <tstamp>
      <format property="LOG_STAMP" pattern="yyyyMMdd_HHmmss" />
    </tstamp>

    <path id="compile.classpath">
        <fileset dir="${fwd.lib.home}"    includes="*.jar"/>
    </path>

    <!-- create the time stamp -->
    <target name="init">
        <tstamp/>

        <!-- copy embedded program code -->
        <copy todir="${app.4gl.src}">
            <fileset dir="${fwd.src.home}/4gl/embedded/" includes="**" />
        </copy>
        <mkdir dir="${deploy.home}/lib"/>
        <!-- copy the asm jars-->
        <copy todir="${deploy.home}/lib">
            <fileset dir="${p2jlib.home}">
                <include name="asm-*.jar"/>
            </fileset>
        </copy> 
        <get src="https://repo1.maven.org/maven2/org/jacoco/org.jacoco.core/0.8.13/org.jacoco.core-0.8.13.jar" skipexisting="true"
             dest="${deploy.home}/lib/org.jacoco.core-0.8.13.jar" verbose="true"/>

        <get src="https://repo1.maven.org/maven2/org/jacoco/org.jacoco.report/0.8.13/org.jacoco.report-0.8.13.jar" skipexisting="true"
             dest="${deploy.home}/lib/org.jacoco.report-0.8.13.jar" verbose="true"/>

        <get src="https://repo1.maven.org/maven2/org/jacoco/org.jacoco.agent/0.8.13/org.jacoco.agent-0.8.13.jar" skipexisting="true"
             dest="${deploy.home}/lib/org.jacoco.agent-0.8.13.jar" verbose="true"/>
        
        <get src="https://repo1.maven.org/maven2/org/jacoco/org.jacoco.ant/0.8.13/org.jacoco.ant-0.8.13.jar" skipexisting="true"
             dest="${deploy.home}/lib/org.jacoco.ant-0.8.13.jar" verbose="true"/>


        <!-- define the ant targets-->
        <taskdef name="jacocoagent" classname="org.jacoco.ant.AgentTask">
            <classpath>
            <pathelement location="${deploy.home}/lib/org.jacoco.ant-0.8.13.jar"/>
            <pathelement location="${deploy.home}/lib/org.jacoco.core-0.8.13.jar"/>
            <pathelement location="${deploy.home}/lib/org.jacoco.agent-0.8.13.jar"/>
            </classpath>
        </taskdef>

        <taskdef name="jacocoreport" classname="org.jacoco.ant.ReportTask">
            <classpath>
            <pathelement location="${deploy.home}/lib/org.jacoco.ant-0.8.13.jar"/>
            <pathelement location="${deploy.home}/lib/org.jacoco.core-0.8.13.jar"/>
            <pathelement location="${deploy.home}/lib/org.jacoco.report-0.8.13.jar"/>
            <fileset dir="${deploy.home}/lib">
                <include name="asm-*.jar"/>
            </fileset>
            </classpath>
        </taskdef>

    </target>

    <target name="check-zfile-set">
      <available file="${zfile}" property="zfile-set"/>
   </target>

   <target name="convert.zset"
           depends="init, coverage.conversion, check-zfile-set"
           description="Convert the 4GL source code to Java source code, using the z-file set file as input."
           if="zfile-set">
      <record name="cvt_${LOG_STAMP}.log" action="start"/>
      <echo message="fileset in use: ${zfile}"/>
      <java classname="com.goldencode.p2j.convert.ConversionDriver"
            fork="true"
            failonerror="true"
            dir="${basedir}">
         <jvmarg value="${agentvmparam.conversion}"/>
         <jvmarg value="-server"/>
         <jvmarg value="-Xmx4G"/>
         <jvmarg value="-XX:-OmitStackTraceInFastThrow"/>
         <jvmarg value="-DP2J_HOME=${fwd.home}"/>
         <arg value="-ZId2"/>
         <arg value="f2+m0+cb"/>
         <arg value="${zfile}"/>
         <classpath refid="compile.classpath"/>
      </java>
      <record name="cvt_${LOG_STAMP}.log" action="stop"/>
   </target>

	<target name="report" >
        <jacocoreport>
            <executiondata>
                <file file="${jacoco.exec}"/>
            </executiondata>
        <structure name="JaCoCo Report">
            <classfiles>
                <fileset dir="${fwd.build.home}/classes/com/goldencode/p2j">
                    <include name="**/*.class"/>
                </fileset>
            </classfiles>
            <sourcefiles encoding="UTF-8">
                <fileset dir="${fwd.src.home}">
                    <include name="**/*.java"/>
                </fileset>
            </sourcefiles>
        </structure>
        <html destdir="${output.dir}"/>
        </jacocoreport>
    </target>
    
    <target name="zip" depends="report">
        <zip destfile="${basedir}/${output.dir.name}.zip"
             basedir="${output.dir}"/>
    </target>

    <target name="coverage.conversion">
        <property name="output.dir"                 value="${basedir}/coverage_conversion" />
        <property name="jacoco.exec"                value="${output.dir}/jacoco.exec" />
         
        <jacocoagent property="agentvmparam.conversion" destfile="${jacoco.exec}"/>
    </target>

    <target name="coverage.preprocessor">
        <property name="output.dir"                 value="${basedir}/coverage_preprocessor" />
        <property name="jacoco.exec"                value="${output.dir}/jacoco.exec" />
         
        <jacocoagent property="agentvmparam.preprocessor" destfile="${jacoco.exec}"/>
     </target>

    <target name="preproc-tests-unix-with-tildes" >
      <echo message="Running preproc-tests-unix" />
      <java classname="com.goldencode.p2j.preproc.Preprocessor"
            fork="true"
            failonerror="false"
            dir="${basedir}">
        <jvmarg value="${agentvmparam.preprocessor}"/>
        <arg value="-unixescapes" />
        <arg value="-keeptildes" />
        <arg value="-out" />
        <arg value="cvt/tests/conversion/preprocessor/test.p" />
        <arg value="tests/conversion/preprocessor/support/basic.p"/>
        <classpath refid="compile.classpath"/>
      </java>
    </target>


    <target name="preproc-tests-unix" depends="preproc-tests-unix-with-tildes" />

    <target name="preproc-tests"      depends="init, coverage.preprocessor, preproc-tests-unix, report" />
    <target name="convert-tests"      depends="convert.zset, report" />
    
</project>