<?xml version="1.0" encoding="UTF-8"?>

<!--

  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="Top-Level property definitions">
    <description>
        Ant file of common properties to be imported by other ant files
    </description>
    
    <dirname property="prop.imported.basedir" file="${ant.file.Top-Level property definitions}"/>
    <property name="jdktools.base.dir" location="${prop.imported.basedir}/.." />
    
    <property file="jdktools.properties"/>
    <property file="${user.home}/jdktools.properties"/>

    <!-- Test run property -->
    <property name="hy.test.forkmode" value="perBatch" />
    <property name="hy.test.vm.name" value="drl"/>

    <!-- set the path root for the classlib : must be relative to the build directory -->
    <property name="external.classlib.loc" value="${jdktools.base.dir}/../working_classlib/deploy" />
    <property name="external.drlvm.loc" value="${jdktools.base.dir}/../working_vm/deploy" />
    <property name="external.resources.loc" value="${jdktools.base.dir}/../common_resources" />
    <property name="external.resources" location="${external.resources.loc}" />

    <property name="harmony.jdktools" location="${jdktools.base.dir}"/>
    <condition property="hy.deploy" value="${hy.hdk}">
        <isset property="hy.hdk"/>
    </condition>
    <property name="hy.deploy" location="${external.drlvm.loc}"/>
    <property name="hy.hdk" location="${external.classlib.loc}" />
    <property name="jdktools.deploy.dir" location="${jdktools.base.dir}/deploy/jdk" />
    <property name="jretools.deploy.dir" location="${jdktools.base.dir}/deploy/jdk/jre" />

    <!-- set the path root for the external resources  -->
    <property name="common.resources.loc" value="${jdktools.base.dir}/../common_resources" />
    <property name="common.resources" location="${common.resources.loc}" />
    <fail>
        <condition>
            <not><available file="${common.resources}/make/properties.xml"/></not>
        </condition>
        Primary dependency is missing: common_resources.
        You need to check it out from SVN repository or specify it's location:
        ant -Dcommon.resources.loc=path
    </fail>
    
    <import file="${common.resources}/make/properties.xml"/>
    <import file="${common.resources}/make/depends.xml"/>
    
    <property file="${jdktools.base.dir}/make/depends.properties" />
    
    <target name="tools-echo" depends="echo"
            description="Display the properties defined by this ant file" >
    </target>

</project>
