<?xml version="1.0" encoding="iso-8859-1"?>
<!--

    Copyright (c) 1997, 2019 Oracle and/or its affiliates. All rights reserved.

    This program and the accompanying materials are made available under the
    terms of the Eclipse Public License v. 2.0, which is available at
    http://www.eclipse.org/legal/epl-2.0.

    This Source Code may also be made available under the following Secondary
    Licenses when the conditions for such availability set forth in the
    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
    version 2 with the GNU Classpath Exception, which is available at
    https://www.gnu.org/software/classpath/license.html.

    SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0

-->

<!DOCTYPE project [
  <!ENTITY commonBuild SYSTEM "ant-common.xml">
]>
<project name="Jakarta Mail" default="all" basedir="."
	xmlns:cpptasks="antlib:org.sf.net.antcontrib.cpptasks">

    <taskdef resource="cpptasks.tasks"/>
    <typedef resource="cpptasks.types"/>

<!-- ========== Initialize Properties =================================== -->

    <!--
        component.name: required property.  the value should be the
                        name of the component directory
    -->
    <property name="component.name" value="mbox"/>

    <property file="./build.properties"/>

    <property name="cc.debug" value="false"/>
    <property name="generated.dir" value="mbox/target/generated"/>
    <property name="obj.dir" value="mbox/target/native/${os.name}-${os.arch}"/>
    <property name="lib.dir" value="mbox/target/lib/${os.name}-${os.arch}"/>
    <condition property="is-solaris">
	<os name="SunOS"/>
    </condition>
    
    &commonBuild;

    <!-- all -->
    <target name="all" depends="mboxcompile, mboxcc, mboxjar"
            description="Build entire mbox component">
    </target>

    <!-- build -->
    <target name="build" depends="mboxcompile, mboxcc, mboxjar"
            description="Build entire mbox component">
    </target>

    <!-- init. Initialization involves creating publishing directories and
         OS specific targets. -->
    <target name="init" description="${component.name} initialization">
        <tstamp>
            <format property="start.time" pattern="MM/dd/yyyy hh:mm aa"/>
        </tstamp>
        <echo message="Building component ${component.name}"/>
        <mkdir dir="${component.classes.mbox.dir}"/>
        <mkdir dir="${generated.dir}"/>
        <mkdir dir="${obj.dir}"/>
        <mkdir dir="${lib.dir}"/>
    </target>

    <!-- prepare manifest files for jars -->
    <target name="cook-manifest" depends="init"
            description="Generate MANIFEST.MF files">
        <mkdir dir="${component.classes.mbox.dir}/manifest"/>
        <copy file="${resources.mbox.dir}/META-INF/MANIFEST.MF"
		tofile="${component.classes.mbox.dir}/manifest/MANIFEST.MF">
            <filterset begintoken="{" endtoken="}">
		<filter token="mail.spec.version"
		    value="${release.specversion}"/>
		<filter token="mail.version" value="${release.version}"/>
            </filterset>
        </copy>
    </target>

    <!-- mbox compile -->
    <target name="mboxcompile" depends="init"
            description="Compile com/sun/mail/mbox sources">

        <javac srcdir="${src.mbox.dir}"
               destdir="${component.classes.mbox.dir}"
               debug="${javac.debug}"
               optimize="${javac.optimize}"
               source="${javac.source}"
               deprecation="${javac.deprecation}"
               failonerror="true"
               target="${javac.target}">
            <classpath>
                <pathelement location="${component.classes.dir}"/>
                <pathelement location="${activation.jar}"/>
            </classpath>
	    <!--
            <include name="com/sun/mail/mbox/**"/>
	    -->
        </javac>
    </target>

    <target name="mboxheaders" depends="mboxcompile">
	<javah destdir="${generated.dir}"
		force="yes"
		verbose="yes"
		classpath="${component.classes.mbox.dir}:${component.classes.dir}">
            <class name="com.sun.mail.mbox.UNIXFile"/>
            <class name="com.sun.mail.mbox.UNIXInbox"/>
	</javah>
    </target>

    <target name="mboxcc" depends="mboxheaders, mboxcc-solaris"/>

    <!--
    make-based build uses these compiler and linker options:

    cc -Xa -xO2 -v -D_REENTRANT   -Dsparc -DSOLARIS2 

    cc -G -o ../../../../../../build/solaris/lib/sparc/libmbox.so 
	    obj/sparc/./UNIXFile.o obj/sparc/./UNIXInbox.o    
	    -L/java/re/jdk/1.4/archive/fcs/binaries/solsparc/jre/lib/sparc 
	    -L../../../../../../build/solaris/lib/sparc  
	    -lmail 
	    -L../../../../../../build/solaris/lib/sparc 
	    -ljava  
	    -lc
    -->

    <target name="mboxcc-solaris" depends="mboxheaders" if="is-solaris">
	<cc debug="${cc.debug}"
		link="shared"
		outfile="${lib.dir}/mbox"
		objdir="${obj.dir}">
	    <compiler name="sunc89"/>
	    <fileset dir="mbox/src/main/cpp" includes="**/*.c"/>
	    <includepath location="${generated.dir}"/>
	    <sysincludepath location="${java.home}/../include"/>
	    <sysincludepath location="${java.home}/../include/solaris"/>
	    <defineset>
		<define name="_REENTRANT"/>
	    </defineset>
	    <compilerarg value="-Xa"/>
	    <compilerarg value="-xO2"/>
	    <linker name="sunc89">
		<syslibset libs="mail,java,c"/>
	    </linker>
	</cc>
    </target>

    <target name="clean" description="Clean the build">
        <delete includeEmptyDirs="true" failonerror="false">
            <fileset dir="${component.classes.mbox.dir}"/>
        </delete>
    </target>

    <!-- Jakarta Mail bundle build targets -->

    <target name="mboxrelease" depends="init, mboxjar, mboxcc">
        <property name="rel" value="mbox-${release.version}"/>
        <property name="zipname" value="${rel}.zip"/>
        <delete file="${basedir}/mbox/target/${zipname}"/>
        <echo message="Creating mbox bundle ${basedir}/mbox/target/${zipname}"/>
        <zip destfile="${basedir}/mbox/target/${zipname}">
	    <zipfileset dir="${resources.legal.dir}/META-INF" prefix="${rel}"
                    includes="LICENSE.txt"/>
	    <zipfileset dir="${release.dir}/lib" prefix="${rel}"
		    includes="mbox.jar"/>
            <zipfileset dir="${lib.dir}/.." prefix="${rel}/lib"
		    includes="**/*.so"/>
        </zip>
    </target>

     <target name="mboxjar" depends="init, mboxcompile, cook-manifest">
        <mkdir dir="${release.dir}/lib"/>
        <jar jarfile="${release.mbox.jar}"
		manifest="${component.classes.mbox.dir}/manifest/MANIFEST.MF">
            <metainf dir="${resources.legal.dir}/META-INF"
		    includes="LICENSE.txt"/>
            <fileset dir="${component.classes.mbox.dir}">
                <include name="com/sun/mail/mbox/*.class"/>
                <include name="com/sun/mail/mbox/mailcap"/>
            </fileset>
        </jar>
     </target>

    <target name="push-to-maven-prepare" depends="-push-to-maven-init, mboxjar"
        description="creates an image for the 'push-to-maven' goal">
        <delete dir="target/maven-repo" /><!-- clean it -->
        <maven-repository-importer destdir="target/maven-repo"
		version="${release.version}">
            <artifact jar="target/release/mbox.jar" pom="mbox.pom"
		    srczip="target/mbox.src.zip" />
        </maven-repository-importer>
    </target>

    <target name="push-to-maven" depends="push-to-maven-prepare"
        description="pushes jars to the java.net maven repository">
        <cvs-import src="target/maven-repo" dest="glassfish/repo" />
    </target>
</project>
