﻿<?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.8.0" unless="${property::exists('project.version')}" />
    <property name="project.release.type" value="SNAPSHOT" 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="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.8.0" />
        <if test="${current.build.framework == 'mono-2.0' or current.build.framework == 'mono-4.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' or current.build.framework == 'mono-4.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.5.8" />
        <property name="vendor.nunit.org.filenames" value="nunit.framework.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}" />
        </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.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" />

    <zipfileset id="src.package.contents" basedir="${basedir}">
        <include name="LICENSE.txt" />
        <include name="NOTICE.txt" />
        <include name="nant-common.xml" />
        <include name="nant.build" />
        <include name="nant.build" />
        <include name="nmsprovider*.config" />
        <include name="vs2008-*.csproj" />
        <include name="vs2008-*.csproj" />
        <include name="vs2008-*.sln" />
        <include name="keyfile/*" />
        <include name="src/**/*.cs" />
        <exclude name="src/sandbox/**" />
    </zipfileset>

    <zipfileset id="bin.package.contents" basedir="${basedir}">
        <include name="LICENSE.txt" />
        <include name="NOTICE.txt" />
        <include name="build/**/nmsprovider*" />
        <include name="build/**/${project.name}*" />
        <include name="lib/**/*" />
        <exclude name="build/**/%temp%/**" />
    </zipfileset>

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