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

	<!-- The EMS module is not CLS compliant yet -->
	<property name="project.cls.compliant" value="false" />

	<!-- 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="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="TIBCO.EMS.dll" value="${basedir}/lib/TIBCO.EMS/${current.build.framework}/TIBCO.EMS.dll" dynamic="true" />
	<property name="NUnit.Projectfile" value="Apache.NMS.EMS.Test.nunit" />

	<!-- Skip certain frameworks, since TIBCO client 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" />

	<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,vendor.tibco.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.6.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" />

		<!-- Property grouping for 'vendor.tibco.org' -->
		<property name="vendor.tibco.org.name" value="TIBCO.EMS" />
		<property name="vendor.tibco.org.group" value="org.tibco.ems" />
		<property name="vendor.tibco.org.version" value="6.0.1" />
		<property name="vendor.tibco.org.filenames" value="TIBCO.EMS.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="${TIBCO.EMS.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="${TIBCO.EMS.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="${TIBCO.EMS.dll}" />
			<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" />
		</fileset>

	</target>

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

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