<project name="common">

        <!-- gwt.build.iscasesensitivefs is true if the filesystem of the
          build machine is case-sensitive, false otherwise.  Update with
          new lines for any supported platforms with case-insensitive
          filesystems
        -->
        <condition property="gwt.build.iscasesensitivefs" else="false">
          <not>
            <or>
              <os family="windows"/>
            </or>
          </not>
        </condition>

	<!-- Global Properties -->
	<property environment="env" />
    <property name="SC_HOME" value="${env.SC_HOME}"/>
    <condition property="SC_VER" value="${env.SC_VER}" else="trunk">
		<isset property="${env.SC_VER}" />
    </condition>
	
	<property name="smartgwt.version" value="2.4" />
	<property name="smartgwt.version.major" value="2" />
	<property name="smartgwt.version.minor" value="4" />
	<property name="smartgwt.previous_version" value="2.2" />

    <condition property="smartgwt.tools.check" value="${env.SMARTGWT_TOOLS}" else="${smartgwt.root}/../tools">
		<isset property="env.SMARTGWT_TOOLS" />
	</condition>
    <property name="smartclient.version" value="${SC_VER}" />

	<property name="smartgwt.tools" location="${smartgwt.tools.check}" />
	<property name="smartgwt.tools.lib" location="${smartgwt.tools}/lib" />
	<property name="smartgwt.tools.antlib" location="${smartgwt.tools}/antlib" />
	<property name="smartgwt.tools.redist" location="${smartgwt.tools}/redist" />
	<property name="smartgwt.build" location="${smartgwt.root}/build" />
	<property name="smartgwt.build.out" location="${smartgwt.build}/out" />
	<property name="smartgwt.build.lib" location="${smartgwt.build}/lib" />
	<property name="smartgwt.build.staging" location="${smartgwt.build}/staging" />
	<property name="smartgwt.build.dist" location="${smartgwt.build}/dist" />
	<property name="project.build" location="${smartgwt.build.out}/${project.tail}" />
	<property name="project.lib" location="${smartgwt.build.lib}/${ant.project.name}.jar" />
	<property name="javac.out" location="${project.build}/bin" />
	<property name="javac.junit.out" location="${project.build}/bin-test" />
	<property name="javac.debug" value="true" />
	<property name="javac.debuglevel" value="lines,vars,source" />
	<property name="javac.encoding" value="utf-8" />
	<property name="javac.source" value="1.5" />
	<property name="javac.nowarn" value="true" />
	<property name="junit.out" location="${project.build}/test" />
    <property name="gwt.doctool.jar" location="${smartgwt.tools.lib}/gwt-build-tools/gwt-doctool.jar" />


    <!-- Sanity check -->
	<available file="${smartgwt.tools}" type="dir" property="gwt.tools.exists" />
	<fail unless="gwt.tools.exists" message="Cannot find '${smartgwt.tools}' tools directory; perhaps you should define the GWT_TOOLS environment variable" />

	<!-- Platform identification -->
	<condition property="build.host.islinux">
		<and>
			<os family="unix" />
			<not>
				<contains string="${os.name}" substring="mac" casesensitive="false" />
			</not>
		</and>
	</condition>
	<condition property="build.host.platform" value="linux">
		<isset property="build.host.islinux" />
	</condition>

	<condition property="build.host.ismac">
		<and>
			<os family="unix" />
			<contains string="${os.name}" substring="mac" casesensitive="false" />
		</and>
	</condition>
	<condition property="build.host.platform" value="mac">
		<isset property="build.host.ismac" />
	</condition>

	<condition property="build.host.iswindows">
		<os family="windows" />
	</condition>
	<condition property="build.host.platform" value="windows">
		<isset property="build.host.iswindows" />
	</condition>
	<fail unless="build.host.platform" message="Building on ${os.name} is not supported" />

	<condition property="junit.platform.args" value="-XstartOnFirstThread" else="">
		<equals arg1="${build.host.platform}" arg2="mac" casesensitive="false" />
	</condition>
	
	
    
    <!--GWT jars location-->
    <property name="gwt.version" value="2.0" />

	<condition property="gwt_home" value="${env.GWT_HOME}" else="${smartgwt.tools.lib}/gwt/${gwt.version}/${build.host.platform}">
		<isset property="env.GWT_HOME" />
	</condition>
	
	<echo>Using GWT from : ${gwt_home}</echo>
	 
    <property name="gwt.user.jar" location="${gwt_home}/gwt-user.jar" />
	<property name="gwt.dev.jar" location="${gwt_home}/gwt-dev-${build.host.platform}.jar" />
	<property name="gwt.dev2.jar" location="${gwt_home}/gwt-dev.jar" />

    <!-- JUnit support -->
	<property name="smartgwt.dev.staging.jar" location="${smartgwt.build.staging}/smartgwt-${smartgwt.version}/smartgwt.jar" />
	<property name="smartgwt.junit.port" value="8889" />
	<property name="smartgwt.junit.testcase.includes" value="**/*Test.class"/>
	
	<!--
		Comma delimited list of host and path components on which to run remote browser testing.
	-->
	<property name="smartgwt.remote.browsers" value="" />


	<!-- Pulls in tasks defined in ant-contrib, i.e. foreach -->
	<taskdef resource="net/sf/antcontrib/antlib.xml">
		<classpath>
			<pathelement location="${smartgwt.tools.antlib}/ant-contrib-1.0b3.jar" />
		</classpath>
	</taskdef>

	<!-- Global Custom Tasks -->
	<presetdef name="gwt.ant">
		<ant inheritall="false" target="${target}">
			<propertyset>
				<propertyref name="smartgwt.version" />
				<propertyref name="smartgwt.junit.port" />
				<propertyref name="smartgwt.remote.browsers" />
			</propertyset>
		</ant>
	</presetdef>

	<presetdef name="gwt.javac">
		<javac srcdir="src" destdir="${javac.out}" debug="${javac.debug}" debuglevel="${javac.debuglevel}" source="${javac.source}" nowarn="${javac.nowarn}" encoding="${javac.encoding}" target="1.5"/>
	</presetdef>

	<presetdef name="gwt.jar">
		<jar destfile="${project.lib}" update="true" duplicate="preserve" index="true" />
	</presetdef>

	<macrodef name="gwt.junit">
		<!-- TODO: make this more generic / refactor so it can be used from dev/core -->
		<attribute name="test.args" default="" />
		<attribute name="test.out" default="" />
		<attribute name="test.reports" default="@{test.out}/reports" />
		<attribute name="test.cases" default="" />
		<sequential>
			<taskdef name="junit" classname="org.apache.tools.ant.taskdefs.optional.junit.JUnitTask">
				<classpath>
					<pathelement location="${smartgwt.tools.lib}/junit/junit-3.8.1.jar" />
					<pathelement location="${smartgwt.tools.antlib}/ant-junit-1.6.5.jar" />
				</classpath>
			</taskdef>

			<echo message="Writing test results to @{test.reports} for @{test.cases}" />
			<mkdir dir="@{test.reports}" />

			<echo message="${javac.out} ${javac.junit.out}" />
			<junit dir="@{test.out}" fork="yes" printsummary="yes" haltonfailure="false">
				<jvmarg line="${junit.platform.args}" />
				<sysproperty key="gwt.args" value="@{test.args}" />
                <!--the hosted mode library is searched based on the path of this library-->
                <sysproperty key="gwt.devjar" value="${gwt.dev.jar}" />
				<sysproperty key="java.awt.headless" value="true" />
 
				<classpath>
					<pathelement location="${smartgwt.root}/${project.tail}/src" />
					<pathelement location="${smartgwt.root}/${project.tail}/test" />
					<pathelement location="${javac.junit.out}" />
					<pathelement location="${javac.out}" />
					<pathelement location="${smartgwt.dev.staging.jar}" />
					<pathelement location="${gwt.user.jar}" />
					<pathelement location="${gwt.dev.jar}" />
					<pathelement location="${smartgwt.tools.lib}/junit/junit-3.8.1.jar" />
				</classpath>

				<formatter type="plain" />
				<formatter type="xml" />

				<batchtest todir="@{test.reports}">
					<fileset refid="@{test.cases}" />
				</batchtest>
			</junit>
		</sequential>
	</macrodef>

	<macrodef name="gwt.tgz.cat">
		<attribute name="destfile" />
		<element name="tar.elements" implicit="true" optional="true" />
		<sequential>
			<taskdef name="tar.cat" classname="com.google.gwt.ant.taskdefs.TarCat" classpath="${smartgwt.build.lib}/ant-gwt.jar" />
			<tar.cat destfile="${project.dist}" compression="gzip" longfile="gnu">
				<tar.elements />
			</tar.cat>
		</sequential>
	</macrodef>

	<macrodef name="gwt.checkstyle">
		<element name="sourcepath" implicit="yes" optional="true" />
		<sequential>
			<taskdef resource="checkstyletask.properties" classpath="${smartgwt.tools.antlib}/checkstyle-all-4.2.jar;${gwt.build.lib}/gwt-customchecks.jar" />
			<checkstyle config="${smartgwt.root}/eclipse/settings/code-style/gwt-checkstyle.xml" maxWarnings="0">
				<property key="checkstyle.header.file" file="${smartgwt.root}/eclipse/settings/code-style/google.header" />
				<sourcepath />
			</checkstyle>
		</sequential>
	</macrodef>

	<macrodef name="property.ensure">
		<attribute name="name" />
		<attribute name="location" />
		<attribute name="message" default="Cannot find dependency ${@{name}}" />
		<attribute name="unless" default="__nonexistent_property__" />
		<sequential>
			<property name="@{name}" location="@{location}" />
			<condition property="@{name}.exists">
				<or>
					<available file="${@{name}}" />
					<isset property="@{unless}" />
				</or>
			</condition>
			<fail unless="@{name}.exists" message="@{message}" />
		</sequential>
	</macrodef>

	<!-- Default implementations of the required targets; projects should
	override the ones that matter -->
	<target name="all" depends="verify" />
	<target name="verify" depends="checkstyle, test" description="Verify this project" />
	<target name="checkstyle" description="Static analysis of source" />
	<target name="test" depends="build" description="Test this project" />
	<target name="build" description="Build and (maybe) package this project" />

	<target name="clean" description="Cleans this project's intermediate and output files">
		<delete dir="${project.build}" />
	</target>

</project>
