<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!--
   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 basedir="." default="build" name="logfeeder">
  <property environment="env" />
  <property name="debuglevel" value="source,lines,vars" />
  <dirname property="builddir" file="build.xml" />
  <property name="target" value="1.7" />
  <property name="source" value="1.7" />
  <property file="local.properties" />
  <property file="build.properties" />
  <target name="init">
  </target>
  <target name="build" />
  
  <target name="package">
    <delete dir="target/package" />
    <copy todir="target/package/libs" includeEmptyDirs="no">
      <fileset file="target/ambari-logsearch-appender.jar" />
    </copy>
    <tar compression="gzip" destfile="target/ambari-logsearch-appender.tar.gz">
      <tarfileset dir="target/package" />
    </tar>
  </target>
  <target description="Build all projects which reference this project. Useful to propagate changes." name="build-refprojects" />
</project>
