<?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.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 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" />
	<property name="build.mono-4.0.skip" value="true" />
	<property name="build.net-2.0.skip" value="true" />
	<property name="build.net-3.5.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.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" />

		<!-- 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="8.2.0" />
		<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>
