<!--
 -
 - 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="AMQ Broker" default="build">

    <property name="module.depends" value="management/common common"/>
    <property name="module.test.depends" value="common/test" />
    <property name="module.main" value="org.apache.qpid.server.Main"/>

    <import file="../module.xml"/>

    <property name="output.dir" value="${module.precompiled}/org/apache/qpid/server/filter/jms/selector"/>

    <property name="qmf.input.file" value="${project.root}/../specs/management-schema.xml"/>
    <property name="qmf.xsl.file" value="${project.root}/broker/src/xsl/qmf.xsl"/>
    <property name="qmf.output.dir" value="${module.precompiled}/org/apache/qpid/qmf/schema"/>
    <property name="qmf.output.file" value="BrokerSchema.java"/>


    <target name="precompile" depends="gen_logging,gen_qmf">
        <mkdir dir="${output.dir}"/>
        <!-- Compile Selcector Code -->
        <javacc target="src/main/grammar/SelectorParser.jj"
                outputdirectory="${output.dir}"
                javacchome="${project.root}/lib"/>
    </target>


  <target name="check_qmf_deps">
    <uptodate property="gen_qmf.notRequired" targetfile="${qmf.output.dir}/${qmf.output.file}">
      <srcfiles file="${qmf.input.file}"/>
      <srcfiles file="${qmf.xsl.file}"/>
    </uptodate>
  </target>

  <target name="gen_qmf" depends="check_qmf_deps" unless="gen_qmf.notRequired">
    <xslt in="${qmf.input.file}" out="${qmf.output.dir}/${qmf.output.file}" style="${qmf.xsl.file}"/>
  </target>

    <target name="copy-etc-release" if="module.etc.exists" description="copy etc directory if it exists to build tree">
      <copy todir="${module.release}/etc" failonerror="false" flatten="true">
          <fileset dir="${module.etc}" excludes="*.conf,*.jpp"/>
      </copy>
    </target>

    <target name="copy-bin-release" description="copy dependencies into module release">
        <copy todir="${module.release}/bin" failonerror="true">
            <fileset dir="${module.bin}"/>
        </copy>
        <copy todir="${module.release}/bin" failonerror="true" flatten="true">
            <fileset dir="${basedir}/../common/bin"/>
        </copy>
        <chmod dir="${module.release}/bin" perm="ugo+rx" includes="**/*"/>
        <fixcrlf srcdir="${module.release}/bin" fixlast="true" eol="unix"/>
        <fixcrlf srcdir="${module.release}/bin" fixlast="true" eol="dos" includes="*.bat"/>
    </target>

    <target name="release-bin-other" description="copy broker-plugins into module release">
        <copy todir="${module.release}/lib/plugins" failonerror="true">
            <fileset dir="${build.lib}/plugins"/>
        </copy>
        <!--copy optional bdbstore module if it exists -->
        <copy todir="${module.release}/lib/" failonerror="false">
            <fileset file="${build.lib}/${project.name}-bdbstore-${project.version}.jar"/>
        </copy>
    </target>

    <target name="release-bin" depends="release-bin-tasks"/>

</project>
