﻿<?xml version="1.0"?>
<!--
    Licensed to the Apache Software Foundation (ASF) under one or more
    contributor license agreements.  See the NOTICE file distributed with
    this work for additional information regarding copyright ownership.
    The ASF licenses this file to You under the Apache License, Version 2.0
    (the "License"); you may not use this file except in compliance with
    the License.  You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

    Unless required by applicable law or agreed to in writing, software
    distributed under the License is distributed on an "AS IS" BASIS,
    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    See the License for the specific language governing permissions and
    limitations under the License.
-->
<project name="Apache.NMS.Stomp" default="default" xmlns="http://nant.sourceforge.net/release/0.85/nant.xsd">
    <!-- ============================================================================================ -->
    <!--      I N I T I A L I Z A T I O N                                                             -->
    <!-- ============================================================================================ -->
    <property name="basedir" value="${project::get-base-directory()}" />
    <property name="project.name" value="Apache.NMS.Stomp" />
    <property name="project.group" value="org.apache.activemq" />
    <property name="project.version" value="1.3.0" unless="${property::exists('project.version')}" />
    <property name="project.release.type" value="RC1" unless="${property::exists('project.release.type')}" />
    <property name="project.short_description" value="Apache NMS for Stomp Class Library" />
    <property name="project.description" value="Apache NMS for Stomp Class Library (.Net Messaging Library Implementation): An implementation of the NMS API for Stomp" />

    <!-- Lib organized as: module/plaform/artifact, platform might be something like 'all' or 'net-2.0/release' -->
    <property name="nunit.dll" value="${basedir}/lib/NUnit/${current.build.framework}/nunit.framework.dll" dynamic="true" />
    <property name="nunit.extensions.dll" value="${basedir}/lib/NUnit/${current.build.framework}/nunit.framework.extensions.dll" dynamic="true" />
    <property name="Apache.NMS.dll" value="${basedir}/lib/Apache.NMS/${current.build.framework}/Apache.NMS.dll" dynamic="true" />
    <property name="Apache.NMS.pdb" value="${basedir}/lib/Apache.NMS/${current.build.framework}/Apache.NMS.pdb" dynamic="true" />
    <property name="Apache.NMS.Test.dll" value="${basedir}/lib/Apache.NMS/${current.build.framework}//Apache.NMS.Test.dll" dynamic="true" />
    <property name="Apache.NMS.Test.pdb" value="${basedir}/lib/Apache.NMS/${current.build.framework}/Apache.NMS.Test.pdb" dynamic="true" />
    <property name="NUnit.Projectfile" value="Apache.NMS.Stomp.Test.nunit" />

    <target name="vendor-init" description="Initializes Vendor library from local repository.">
        <!--
           Vendor specific info.  The prefix of 'vendor.apache.org' is taken from the property
           'vendor.fileset.names'.  This comma-delimited list is iterated, and properties with
           well-known suffixes are used to access and copy down vendor file dependencies.
        -->
        <property name="vendor.fileset.names" value="vendor.apache.org,vendor.nunit.org" />

        <!-- Property grouping for 'vendor.apache.org' -->
        <property name="vendor.apache.org.name" value="Apache.NMS" />
        <property name="vendor.apache.org.group" value="org.apache.activemq" />
        <property name="vendor.apache.org.version" value="1.3.0" />
        <if test="${current.build.framework == 'mono-2.0'}">
            <property name="vendor.apache.org.filenames" value="Apache.NMS.dll,Apache.NMS.dll.mdb,Apache.NMS.Test.dll,Apache.NMS.Test.dll.mdb" />
        </if>
        <if test="${not (current.build.framework == 'mono-2.0')}">
            <property name="vendor.apache.org.filenames" value="Apache.NMS.dll,Apache.NMS.pdb,Apache.NMS.Test.dll,Apache.NMS.Test.pdb" />
        </if>

        <!-- Property grouping for 'vendor.nunit.org' -->
        <property name="vendor.nunit.org.name" value="NUnit" />
        <property name="vendor.nunit.org.group" value="org.nunit" />
        <property name="vendor.nunit.org.version" value="2.4.8" />
        <property name="vendor.nunit.org.filenames" value="nunit.framework.dll,nunit.framework.extensions.dll" />
    </target>

    <target name="dependency-init" description="Initializes build dependencies">
        <assemblyfileset failonempty="true" id="dependencies">
            <include name="${current.build.framework.assembly.dir}/mscorlib.dll" />
            <include name="${current.build.framework.assembly.dir}/System.dll" />
            <include name="${current.build.framework.assembly.dir}/System.Xml.dll" />
            <include name="${Apache.NMS.dll}" />
        </assemblyfileset>

        <assemblyfileset failonempty="true" id="test.dependencies">
            <include name="${current.build.framework.assembly.dir}/mscorlib.dll" />
            <include name="${current.build.framework.assembly.dir}/System.dll" />
            <include name="${current.build.framework.assembly.dir}/System.Xml.dll" />
            <include name="${Apache.NMS.dll}" />
            <include name="${Apache.NMS.Test.dll}" />
            <include name="${build.bin.dir}/${project.name}.dll" />
            <include name="${nunit.dll}" />
            <include name="${nunit.extensions.dll}" />
        </assemblyfileset>

        <fileset id="content.filenames">
            <include name="LICENSE.txt" />
            <include name="NOTICE.txt" />
            <include name="nmsprovider-*.config" />
            <include name="${Apache.NMS.dll}" />
            <include name="${Apache.NMS.pdb}" />
            <include name="${Apache.NMS.Test.dll}" />
            <include name="${Apache.NMS.Test.pdb}" />
            <include name="${nunit.dll}" />
            <include name="${nunit.extensions.dll}" />
            <include name="${NUnit.Projectfile}" />
        </fileset>

        <fileset id="install.filenames">
            <include name="LICENSE.txt" />
            <include name="NOTICE.txt" />
            <include name="${build.bin.dir}/${project.name}.dll" />
            <include name="${build.bin.dir}/${project.name}.pdb" />
            <include name="${build.bin.dir}/${project.name}.dll.mdb" />
        </fileset>

    </target>

    <target name="default" depends="install-all" />

    <!-- Load the common target definitions  -->
    <include buildfile="${basedir}/nant-common.xml" />
</project>
