<?xml version="1.0"?>
<!--/*******************************************************************************
* 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 concatenated
*     e.g. 'runpathref'
*   - multi-word tasks (taskdef) names are concatenated
*     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:
*     tware - initial API and implementation
*     egwin - update to adopt calling standards
*     egwin - strip BND and compile code. File only needed for dev packaging now
#******************************************************************************/-->
<project name="org.eclipse.persistence.core" default="jar" basedir=".">
    <available file="../${ant.project.name}" type="dir" property="core.is.local"/>
    <!-- Test to make sure that the calling script doesn't inherit the variable -->
    <!-- (should be set locally, and be destroyed upon return) -->
    <fail message="Not running from '${ant.project.name}' directory" unless="core.is.local"/>

    <dirname  property="core.build.location_temp" file="${ant.file.org.eclipse.persistence.core}"/>
    <pathconvert targetos="unix" property="core.build.location">
        <path>
            <pathelement location="${core.build.location_temp}"/>
        </path>
    </pathconvert>
    <echo message="core.build.location = '${core.build.location}'"/>
    <condition property="core.2.base.dir" value="../.." else="..">
        <contains string="${core.build.location}" substring="foundation/${ant.project.name}"/>
    </condition>
    <echo message="core.2.base.dir = '${core.2.base.dir}'"/>
    <property name="core.2.common.plugins.dir" value="${core.2.base.dir}/plugins"/>

    <!-- local property overrides -->
    <condition property="custom.properties.message" value="Loading ${user.home}/build.properties..."
                                                     else="Custom properties file '${user.home}/build.properties' not found to load.">
        <available file="${user.home}/build.properties"/>
    </condition>
    <echo message="${custom.properties.message}"/>
    <property file="${user.home}/build.properties"/>
    <property file="${core.build.location}/antbuild.properties"/>

    <!-- Primary Targets: "jar" separate for dev use -->
    <target name="jar"   depends="package" description="package ${ant.project.name} component"/>

    <!-- initialize varables and paths needed for compile -->
    <!-- the number of properties needed now is too great for lazy loading without a target -->
    <target name="init">
        <property name="core.manifest.file"      value="${core.build.location}/META-INF/MANIFEST.MF"/>

        <!-- versioning -->
        <!-- These variables  are set in autobuild.xml. 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="svn.revision"          value="NA"/>
        <property name="version.qualifier"     value="qualifier"/>
        <property name="version.string"        value="${release.version}.${version.qualifier}"/>
        <property name="release.designation"   value="EclipseLink ${release.version} Build"/>
        <property name="specification.vendor"  value="Eclipse.org - EclipseLink Project"/>
        <property name="implementation.vendor" value="${specification.vendor}"/>

        <condition property="compiled_classes.dir" value="${classes.dir}" else="target/classes">
            <available file="${classes.dir}" type="dir"/>
        </condition>

        <available file="${compiled_classes.dir}" type="dir" property="classes.exist"/>
    </target>

    <!-- package -->
    <target name="package-src" depends="init" description="jar OSGI src bundle">
        <delete file="${core.2.common.plugins.dir}/${ant.project.name}.source_${version.string}.jar"/>
        <jar jarfile="${core.2.common.plugins.dir}/${ant.project.name}.source_${version.string}.jar" duplicate="preserve">
             <manifest>
                <attribute name="Specification-Vendor"   value="${specification.vendor}"/>
                <attribute name="Specification-Version"  value="${release.version}"/>
                <attribute name="Implementation-Vendor"  value="${implementation.vendor}"/>
                <attribute name="Implementation-Version" value="${version.string}"/>
                <attribute name="Bundle-ManifestVersion" value="2"/>
                <attribute name="Bundle-Name"            value="EclipseLink Core Source"/>
                <attribute name="Bundle-SymbolicName"    value="${ant.project.name}.source"/>
                <attribute name="Bundle-Vendor"          value="${implementation.vendor}"/>
                <attribute name="Bundle-Version"         value="${version.string}"/>
                <attribute name="Eclipse-SourceBundle"   value="${ant.project.name};version=&quot;${version.string}&quot;"/>
            </manifest>
            <fileset dir="${core.2.base.dir}">
                <include name="about.html"/>
                <include name="readme.html"/>
                <include name="license.*"/>
            </fileset>
            <fileset dir="${src.dir}">
                <include name="org/eclipse/persistence/**/*.java"/>
            </fileset>
            <fileset dir="${resource.dir}">
                <include name="org/eclipse/persistence/**/*.xsd"/>
                <include name="org/eclipse/persistence/internal/helper/VendorNameToPlatformMapping.properties"/>
            </fileset>
        </jar>
    </target>

    <target name="package" depends="init, package-src" description="jar OSGI bundle">
        <delete file="${core.2.common.plugins.dir}/${ant.project.name}_${version.string}.jar"/>
        <jar jarfile="${core.2.common.plugins.dir}/${ant.project.name}_${version.string}.jar" duplicate="preserve" manifest="${core.manifest.file}">
            <fileset dir="${core.2.base.dir}">
                <include name="about.html"/>
                <include name="readme.html"/>
                <include name="license.*"/>
            </fileset>
            <fileset dir="${compiled_classes.dir}">
                <include name="org/eclipse/persistence/**/*.class"/>
            </fileset>
            <fileset dir="${resource.dir}">
                <include name="org/eclipse/persistence/**/*.xsd"/>
                <include name="org/eclipse/persistence/internal/helper/VendorNameToPlatformMapping.properties"/>
            </fileset>
        </jar>
    </target>

</project>