<?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="TopicListener" default="build">
    <!--
		Properties that come from master build file
		- build.dir: root directory for build
		- build.debug: true if building debug release
		- build.defines: variables to define during build
    -->

    <target name="build">
        <csc target="exe" 
				define="${build.defines}" 
            debug="${build.debug}"
            unsafe="true"
				output="${build.dir}/${project::get-name()}.exe">
			
			<sources>
			   <include name="**/*.cs" />
         </sources>
         <references>
            <include name="${build.dir}\Apache.Qpid.Client.Tests.dll"/>
         </references>
        </csc>
    </target>
</project>

