<!--/*******************************************************************************
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v1.0 and Eclipse Distribution License v. 1.0
* which accompanies this distribution.
* The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html
* and the Eclipse Distribution License is available at
* http://www.eclipse.org/org/documents/edl-v10.php.
*
*   Ant naming conventions:
*   - regardless of the actual OS platform,'/' is the directory separator
*     (Ant will convert as appropriate).
*   - multi-word properties use periods '.'
*     - properties ending in .jar define jarfile names only (no path)
*     - properties ending in .lib are fully qualified jars (path and filename)
*     - properties ending in .dir are directory paths
*     - properties ending in .path are path refid names (classpath fragments)
*   - multi-word targets use hyphens '-'
*     - targets beginning with test- are reserved for high level test targets,
*       and are used in test results parsing
*     - targets typically use the form <action>-<object>-<type> (ie. package-bundle-zip)
*   - multi-word macros use underscores '_'
*   - multi-word macro attributes are concatinated
*     e.g. 'runpathref'
*   - multi-word tasks (taskdef) names are concatinated
*     e.g. 'validateconnection'
*   - OS environment variables are in ALLCAPS and have 'env' as a prefix
*     e.g. ${env.XXX}.
*   - Ant properties are lower case.
*
* Contributors:
*     egwin  - initial implementation.
#******************************************************************************/-->
<!-- =============================================================================
*  General Comments
*  This buildfile contains:
*        - calls to the component builds to clean, compile, package and test thier bits
*        - calls to initiate component tests
*        - targets to generate the eclipselink tools installer
*        - targets to generate the javadocs
*  Used standalone it can generate Developer Builds of the entire product or subsets
*        of the product.
*================================================================================= -->
<!-- This ant project includes the following tasks:
        - build (default) : compiles all components and tests
        - clean : removes all build generated files
        - build-distribution : compiles and packages all jars, javadocs, installer
        - build-javadocs : generates Javadocs
        - package-installer-zip : builds installer
        - test-srg : runs all Short ReGression test suites
        - test-lrg : runs all Long ReGression test suites

        It may require some configuration of the build.properties to run.
    -->
<project name="eclipselink.tools.temp" default="build" basedir=".">

    <target name="build"              depends="init, build-tools"                                   description="Default ant target, compiles all components and tests"/>
    <target name="clean"              depends="init, clean-tools"                                   description="Cleans all build generated files."/>
    <target name="build-distribution" depends="clean, build, build-javadocs, package-installer-zip" description="Builds all jars, generates javadoc, and builds installer."/>
    <target name="test-srg"           depends="init, test-tools-srg"                                description="Run the SRG test suites"/>
    <target name="test-lrg"           depends="init, test-tools-lrg"                                description="Run the LRG test suites"/>

<!-- ================================================================================= -->
<!-- ===========================  Init Targets  ====================================== -->
    <target name="init">
        <dirname  property="tools.build.location_temp" file="${ant.file.eclipselink.tools.temp}"/>
        <pathconvert targetos="unix" property="tools.build.location">
            <path>
                <pathelement location="${tools.build.location_temp}"/>
            </path>
        </pathconvert>
        <echo message="tools.build.location = '${tools.build.location}'"/>
        <property environment="env"/>
        <echo message="env.JAVA_HOME   = '${env.JAVA_HOME}'"/>
        <echo message="env.ANT_HOME    = '${env.ANT_HOME}'"/>
        <echo message="env.JUNIT_HOME  = '${env.JUNIT_HOME}'"/>
        <echo message="env.MAVENANT_DIR= '${env.MAVENANT_DIR}'"/>
        <echo message="env.PATH        = '${env.PATH}'"/>
        <echo message="env.CLASSPATH   = '${env.CLASSPATH}'"/>
        <echo message="env.GIT_EXEC    = '${env.GIT_EXEC}'"/>
        <echo message="env.TARGET      = '${env.TARGET}'"/>
        <echo message=" "/>
        <!-- Allows a user to overide certain user specific properties. -->
        <echo message="user.home            = '${user.home}'"/>

        <!-- local property overrides -->
        <condition property="custom.properties.message" value="Loading ${user.home}/build.properties..."
                                                        else="Custom properties file '${user.home}/build.properties' not found. Skipping...">
            <available file="${user.home}/build.properties"/>
        </condition>
        <echo message="${custom.properties.message}"/>
        <property file="${user.home}/build.properties"/>

        <!-- default dependency jar location -->
        <condition property="extensions.depend.dir" value="${tools.build.location}/../extension.lib.external"
                                                    else="${tools.build.location}">
            <available file="${tools.build.location}/../extension.lib.external" type="dir"/>
        </condition>
        <echo message="extensions.depend.dir= '${extensions.depend.dir}'"/>

        <!-- helper definitions -->
        <property name="tools.root"           value="${tools.build.location}/tools"/>
        <property name="tools.mvn.parent"     value="${tools.root}/org.eclipse.persistence.tools.parent"/>
        <property name="tools.prefix"         value="eclipselink-tools"/>

        <!-- Versioning -->
        <!-- These variables are set in Hudson. A manual build gets defaults -->
        <tstamp>
           <format property="build.date" pattern="yyyyMMdd"/>
           <format property="build.time" pattern="HHmm"/>
        </tstamp>
        <property name="build.type" value="SNAPSHOT"/>
        <property name="git.hash"   value="NA"/>
        <condition property="version.qualifier" value="qualifier"
                                                else="v${build.date}-${git.hash}">
            <equals arg1="${git.hash}" arg2="NA"/>
        </condition>
        <property name="release.version"     value="2.6.0"/>
        <property name="version.string"      value="${release.version}.${version.qualifier}"/>
        <property name="release.designation" value="EclipseLink DeveloperBuild"/>
        <!-- generate string for tag creation (used for maven publish and handoff-version as well)  -->
        <condition property="milestone.tag" value="${release.version}">
            <equals arg1="${build.type}" arg2="RELEASE"/>
        </condition>
        <property name="milestone.tag" value="${release.version}-${build.type}"/>
        <echo message="milestone.tag        ='${milestone.tag}'"/>

        <!-- Javadoc properties -->
        <property name="javadoc.title" value="EclipseLink Tools ${release.version}, build '${version.qualifier}' API Reference"/>
        <property name="javadoc.dir" value="${tools.build.location}/tools/target/javadoc"/>
        <path id="javadoc.path">
            <pathelement path="${some.jar}"/>
        </path>

        <echo message="ANT_ARGS='${env.ANT_ARGS}'"/>
        <echo message="ANT_OPTS='${env.ANT_OPTS}'"/>
        <echo message=" "/>
        <echo message="java.version   ='${java.version}'"/>
        <echo message="java.class.path='${java.class.path}'"/>
        <echo message="os.name        ='${os.name}'"/>
        <echo message="os.arch        ='${os.arch}'"/>
        <echo message="os.version     ='${os.version}'"/>
        <echo message=" "/>
        <echo message="tools.root      ='${tools.root}'"/>
        <echo message="tools.mvn.parent='${tools.mvn.parent}'"/>
        <echo message="tools.prefix    ='${tools.prefix}'"/>
        <echo message=" "/>
        <echo message="builddate.buildtime='${build.date}.${build.time}'"/>
        <echo message="git.hash           ='${git.hash}'"/>
        <echo message="build.type         ='${build.type}'"/>
        <echo message="version.qualifier  ='${version.qualifier}'"/>
        <echo message="release.version    ='${release.version}'"/>
        <echo message="version.string     ='${version.string}'"/>
        <echo message="release.designation='${release.designation}'"/>
        <echo message=" "/>
        <echo message="javadoc.title ='${javadoc.title}'"/>
        <echo message="javadoc.dir   ='${javadoc.dir}'"/>
    </target>

    <!-- Needed for Maven/Tycho builds -->
    <target name="check-maven" description="Verify the Maven tool is installed and configured">
        <condition property="M2_HOME" value="${env.M2_HOME}">
            <isset property="env.M2_HOME"/>
        </condition>
        <echo message="Maven install (M2_HOME) set to: '${M2_HOME}'"/>
        <available file="${M2_HOME}/bin/mvn" property="use.maven"/>
        <fail message="Maven 3 not found. Build won't run if Maven 3 not installed and M2_HOME properly set!." unless="use.maven"/>
    </target>

<!-- ================================================================================= -->
<!-- ===========================  Clean Targets  ===================================== -->
    <target name="clean-tools" depends="check-maven" description="Clean the maven built runtime projects">
        <java dir="${tools.mvn.parent}" fork="true" failonerror="true" classname="org.codehaus.plexus.classworlds.launcher.Launcher">
             <jvmarg value="-Dclassworlds.conf=${M2_HOME}/bin/m2.conf"/>
             <jvmarg value="-Dmaven.home=${M2_HOME}"/>
             <jvmarg value="-Dbuild.qualifier=${version.qualifier}"/>
             <arg value="clean"/>
             <classpath>
                <fileset dir="${M2_HOME}/boot">
                   <include name="plexus-classworlds-*.jar"/>
                </fileset>
             </classpath>
        </java>
        <echo message="Deleting: '${tools.root}/target/**/*'"/>
        <delete failonerror="false">
            <fileset dir="${tools.root}/target">
                <include name="**/*"/>
            </fileset>
        </delete>
        <echo message="Deleting old archives: '${tools.build.location}/${tools.prefix}*.zip'"/>
        <delete failonerror="false">
            <fileset dir="${tools.build.location}">
                <include name="${tools.prefix}*.zip"/>
            </fileset>
        </delete>
    </target>

    <!-- Placeholder for non-OSGi test targets -->
    <target name="clean-tools-test" description="Clean the testing projects">
        <echo message="clean-tools-test"/>
        <!-- ant antfile="antbuild.xml" dir=""           target="clean"/>
        <delete file="${eclipselink.tst.src.prefix}${eclipselink.zip.suffix}" failonerror="false"/ -->
    </target>

<!-- ================================================================================= -->
<!-- ===========================  Build Targets  ===================================== -->
    <!-- Compiles all runtime tools OSGi components. -->
    <target name="build-tools" depends="check-maven">
        <echo message="Launching Maven build with the following parameters:"/>
        <echo message="    -Dclassworlds.conf=${M2_HOME}/bin/m2.conf"/>
        <echo message="    -Dmaven.home=${M2_HOME}"/>
        <echo message="    -Dbuild.qualifier=${version.qualifier}"/>
        <echo message="    -DforceContextQualifier=${version.qualifier}"/>
        <echo message="    verify"/>
        <java dir="${tools.mvn.parent}" fork="true" failonerror="true" classname="org.codehaus.plexus.classworlds.launcher.Launcher">
             <jvmarg value="-Dclassworlds.conf=${M2_HOME}/bin/m2.conf"/>
             <jvmarg value="-Dmaven.home=${M2_HOME}"/>
             <jvmarg value="-Dbuild.qualifier=${version.qualifier}"/>
             <jvmarg value="-DforceContextQualifier=${version.qualifier}"/>
             <!-- arg value="-X"/ -->
             <arg value="verify"/>
             <classpath>
                <fileset dir="${M2_HOME}/boot">
                   <include name="plexus-classworlds-*.jar"/>
                </fileset>
             </classpath>
        </java>
    </target>

<!-- ================================================================================= -->
<!-- ===========================  Javadoc Targets  =================================== -->
    <target name="build-javadocs">
        <!-- the following property needs to be here because the "qualifier" is generated at runtime -->
        <mkdir dir="${javadoc.dir}"/>
        <delete dir="${javadoc.dir}" failonerror="false"/>
        <javadoc
            maxmemory="384m"
            Verbose="false"
            packagenames="org.eclipse.persistence.**"
            destdir="${javadoc.dir}"
            useexternalfile="yes"
            additionalparam="-breakiterator -quiet"
            windowtitle="${javadoc.title}"
            >
            <classpath>
                <path refid="javadoc.path"/>
            </classpath>
            <tag name ="author" enabled="true" description="Author:" />
            <tag name ="since" scope="all" description="Since:" />
            <tag name ="SBGen" scope="all" description="SBGen:" />
            <tag name ="bug" enabled="true" description="Related Bugs:" />
            <doctitle><![CDATA[${javadoc.title}]]></doctitle>
            <header><![CDATA[${javadoc.title}]]></header>

            <!-- *** EclipseLink modules *** -->
            <fileset dir="${tools.build.location}/tools/org.eclipse.persistence.tools.db/src" defaultexcludes="yes">
                <include name="org/eclipse/persistence/tools/**/*.java"/>
                <exclude name="org/eclipse/persistence/tools/internal/**/*.java"/>
            </fileset>
            <fileset dir="${tools.build.location}/tools/org.eclipse.persistence.tools.gen.db/src" defaultexcludes="yes">
                <include name="org/eclipse/persistence/tools/**/*.java"/>
                <exclude name="org/eclipse/persistence/tools/internal/**/*.java"/>
            </fileset>
            <fileset dir="${tools.build.location}/tools/org.eclipse.persistence.tools.mapping/src" defaultexcludes="yes">
                <include name="org/eclipse/persistence/tools/**/*.java"/>
                <exclude name="org/eclipse/persistence/tools/internal/**/*.java"/>
            </fileset>
            <fileset dir="${tools.build.location}/tools/org.eclipse.persistence.tools.utility/src" defaultexcludes="yes">
                <include name="org/eclipse/persistence/tools/**/*.java"/>
                <exclude name="org/eclipse/persistence/tools/internal/**/*.java"/>
            </fileset>
            <fileset dir="${tools.build.location}/tools/org.eclipse.persistence.tools.gen.nosql/src" defaultexcludes="yes">
                <include name="org/eclipse/persistence/tools/**/*.java"/>
                <exclude name="org/eclipse/persistence/tools/internal/**/*.java"/>
            </fileset>
        </javadoc>
    </target>

<!-- ================================================================================= -->
<!-- ===========================  Package Targets  =================================== -->
    <!-- Packages javadoc into a zip. -->
    <target name="package-javadoc-zip" depends="build-javadocs" description="build EclipseLink javadoc zip">
        <delete file="${tools.prefix}-javadoc-${version.string}.zip" failonerror="false"/>
        <zip destfile="${tools.prefix}-javadoc-${version.string}.zip">
            <!-- miscellaneous files -->
            <zipfileset dir="${javadocs.dir}/"/>
        </zip>
    </target>

    <!-- Packages the installer zip. -->
    <target name="package-installer-zip" description="build EclipseLink Tools Installer zip">
        <delete file="${tools.prefix}-${version.string}.zip" failonerror="false"/>
        <zip destfile="${tools.prefix}-${version.string}.zip">
            <!-- miscellaneous files -->
            <zipfileset dir="${tools.mvn.parent}/resource">
                <include name="*.html"/>
            </zipfileset>
            <zipfileset dir=".">
                <include name="eclipselink-tools-javadoc-${version.string}.zip"/>
            </zipfileset>
            <!-- Library bundles -->
            <zipfileset dir="${tools.root}/target">
                <include name="*.jar"/>
                <exclude name="*.test*"/>
                <exclude name="*.parent*"/>
            </zipfileset>
            <!-- Testing bundles -->
            <zipfileset dir="${tools.root}/target" prefix="testing">
                <include name="*.test*"/>
            </zipfileset>
        </zip>
    </target>

<!-- ================================================================================= -->
<!-- ===========================  Test Targets  ====================================== -->

    <!-- Run All LRG tests -->
    <target name="test-tools-lrg"
            description="run all the EclipseLink Tools LRG tests"
            depends="test-utility-lrg, test-mapping-lrg" />

    <!-- Run Utility LRG tests -->
    <target name="test-utility-lrg" description="run the EclipseLink Tools Utility LRG tests">
        <ant antfile="antbuild.xml" dir="${tools.root}/org.eclipse.persistence.tools.utility.tests" target="test"/>
    </target>
    <!-- Run Mapping LRG tests -->
    <target name="test-mapping-lrg" description="run the EclipseLink Tools Mapping LRG tests">
        <ant antfile="antbuild.xml" dir="${tools.root}/org.eclipse.persistence.tools.mapping.tests" target="test"/>
    </target>


    <!-- Run All SRG tests -->
    <target name="test-tools-srg"
            description="run all the EclipseLink Tools SRG tests"
            depends="test-utility-srg, test-mapping-srg" />

    <!-- Run Utility SRG tests -->
    <target name="test-utility-srg" description="run the EclipseLink Tools Utility SRG tests">
        <ant antfile="antbuild.xml" dir="${tools.root}/org.eclipse.persistence.tools.utility.tests" target="test-srg"/>
    </target>
    <!-- Run Mapping SRG tests -->
    <target name="test-mapping-srg" description="run the Mapping tests">
        <ant antfile="antbuild.xml" dir="${tools.root}/org.eclipse.persistence.tools.mapping.tests" target="test-srg"/>
    </target>

<!-- ================================================================================= -->
<!-- ===========================  AutoBuild Targets  ================================= -->

    <target name="build-nightly" depends="get-git-hash, build-distribution, publish-distribution"   description="Setup for nightly, build, then export for promote"/>

<!-- ================================================================================= -->
<!-- ===========================  AutoBuild Init Targets  ============================ -->
    <target name="set-defaults">
        <!-- The following variables should be passed from Hudson:
                 env.JAVA_HOME   - JAVA_HOME as defined by Hudson
                 git.exec        - fully qualified path to git executable
                 build.deps.dir  - location on buildserver that stores dependencies (/shared/rt/eclipselink/bld_deps/master)
                 junit.dir       - directory where junit.jar can be found
                 junit.lib       - fully qualified path to junit jarfile (junit.dir/junit.jarname)
                 build.tool.root - root of build server (from here releng and db data files can be found)
                 hudson.workspace- WORKSPACE as defined by the Hudson slave
                 M2_HOME         - location of Maven3 install (on build server)
        -->
        <property name="branch" value="master"/>
        <condition property="git.exec.message"   value="git.exec        = '${git.exec}' (Set by Hudson Job)"
                                                  else="git.exec        = not set!">
            <isset property="git.exec"/>
        </condition>

        <!-- property file="${build.tool.root}/db-${branch}.properties"/ -->

        <!-- M2_HOME defaults the value maven 3.0.3 install location on the build -->
        <!--   server for AutoBuilds. This is brittle, but easier for now         -->
        <property name="M2_HOME" value="/shared/common/apache-maven-3.0.3"/>
        <!-- Set location of executed scripts to hudson (is also set in promote-init for milestone publising) -->
        <property name="script.dir" value="${hudson.workspace}/buildsystem"/>
        <!-- Set location to export builds for publishing -->
        <property name="extract.root.dir"  value="${build.tool.root}/exported_builds"/>

        <echo message=" "/>
        <echo message="${git.exec.message}"/>
        <echo message="build.deps.dir  = '${build.deps.dir}'"/>
        <echo message="build.tool.root = '${build.tool.root}'"/>
        <echo message="hudson.workspace= '${hudson.workspace}'"/>
        <echo message="M2_HOME         = '${M2_HOME}'"/>
        <echo message=" "/>
        <echo message="branch          = '${branch}'"/>
        <echo message="extract.root.dir= '${extract.root.dir}'"/>
    </target>

    <target name="get-git-hash" unless="git.hash" depends="set-defaults">
        <fail message="${git.exec.message}" unless="git.exec"/>
        <!-- get git.hash    NOTE: if "get" fails defaulted to "NA" -->
        <exec outputproperty="git.hash"
            failonerror="false"
            failifexecutionfails="false"
            errorproperty="githash.failed"
            logError="true"
            executable="${git.exec}">
            <arg value="log"/>
            <arg value="-1"/>
            <arg value="--format=%h"/>
        </exec>
        <property name="git.hash" value="NA"/>
    </target>

<!-- ================================================================================= -->
<!-- ===========================  AutoBuild Publish Targets  ========================= -->

    <target name="cannot-generate-handoff" unless="procedure" depends="init">
        <fail message="'procedure' not set. Cannot generate handoff file!"/>
    </target>
    <target name="generate-handoff" if="procedure" depends="cannot-generate-handoff" description="generate the publishing handoff file">
        <property name="handoff.file" value="${build.tool.root}/handoff-file-${procedure}-${branch}-${version.qualifier}.dat"/>
        <echo message="Generating Publishing handoff file with the following values:"/>
        <echo message="    procedure    ='${procedure}'"/>
        <echo message="    extract.loc  ='${extract.loc}'"/>
        <echo message="    host         ='${host}'"/>
        <echo message="    milestone.tag='${milestone.tag}'"/>
        <echo message="    handoff.file ='${handoff.file}'"/>

        <echo message="extract.loc=${extract.loc} host=${host} maven.tag=${milestone.tag}" file="${handoff.file}" append="false"/>
        <!-- could use ${line.separator} to generate on separate lines, but don't as yet -->
    </target>

    <target name="publish-distribution" depends="build-distribution">
        <echo message="publish-distribution"/>
        <property name="tools.extract.dir" value="${extract.root.dir}/tools/${release.version}/${version.qualifier}"/>
        <mkdir dir="${tools.extract.dir}"/>
        <echo message="Exporting Tools artifacts..."/>
        <echo message="   from '${hudson.workspace}'"/>
        <echo message="     to '${tools.extract.dir}'"/>
        <copy todir="${tools.extract.dir}" failonerror="false">
            <fileset  dir="${hudson.workspace}">
                <include name="${tools.prefix}*${version.qualifier}.zip"/>
            </fileset>
        </copy>
        <!-- Generate proper handoff file -->
        <antcall target="generate-handoff">
            <param name="procedure"   value="tools"/>
            <param name="host"        value="Eclipse"/>
            <param name="extract.loc" value="${tools.extract.dir}"/>
        </antcall>
    </target>

</project>
