<?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.MSMQ" 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.MSMQ" />
    <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 MSMQ Class Library" />
    <property name="project.description" value="Apache NMS for MSMQ Class Library (.Net Messaging Library Implementation): An implementation of the NMS API for MSMQ" />

    <!-- Repository organized as: organization/module/version/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="NUnit.Projectfile" value="Apache.NMS.MSMQ.Test.nunit" />

    <!-- Skip certain frameworks, since MSMQ is not supported on those platforms. -->
    <property name="build.netcf-2.0.skip" value="true" />
    <property name="build.netcf-3.5.skip" value="true" />
    <property name="build.mono-2.0.skip" value="true" />
    <property name="build.mono-4.0.skip" value="true" />

    <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" />
        <property name="vendor.apache.org.filenames" value="Apache.NMS.dll,Apache.NMS.pdb,Apache.NMS.Test.dll,Apache.NMS.Test.pdb" />

        <!-- 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="${current.build.framework.assembly.dir}/System.Messaging.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="${current.build.framework.assembly.dir}/System.Messaging.dll" />
            <include name="${Apache.NMS.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="${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" />
        </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>
