<?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="solr-webapp" default="default">
  <description>Solr webapp</description>

  <property name="rat.additional-includes" value="**"/>
  <property name="rat.additional-excludes" value="web/img/**"/>

  <import file="../common-build.xml"/>

  <property name="exclude.from.webapp" value="*slf4j*,log4j-*,*javax.servlet*" />
  
  <!-- this module has no javadocs -->
  <target name="javadocs"/>

  <!-- this module has no jar either -->
  <target name="jar-core"/>

  <!-- nothing to compile -->
  <target name="compile-core"/>
  <target name="compile-test"/>
  <target name="test"/>

  <target name="dist"
          description="Creates the Webapp folder for distribution."
          depends="dist-core, dist-solrj, lucene-jars-to-solr">
    <ant dir="${common-solr.dir}" inheritall="false" target="contribs-add-to-webapp"/>
    <mkdir dir="${server.dir}/solr-webapp/webapp"/>
    <copy todir="${server.dir}/solr-webapp/webapp">
      <fileset dir="web" excludes="${exclude.from.webapp}"/>
      <fileset dir="${dest}/web" excludes="${exclude.from.war}"/> <!-- contribs' additions -->
    </copy>
    <mkdir dir="${server.dir}/solr-webapp/webapp/WEB-INF/lib"/>
    <copy todir="${server.dir}/solr-webapp/webapp/WEB-INF/lib">
      <fileset dir="${common-solr.dir}/core/lib" excludes="${exclude.from.webapp},${common.classpath.excludes}"/>
      <fileset dir="${common-solr.dir}/solrj/lib" excludes="${exclude.from.webapp},${common.classpath.excludes}"/>
      <fileset dir="${lucene-libs}" excludes="${exclude.from.webapp},${common.classpath.excludes}" />
      <fileset dir="${dist}" excludes="${exclude.from.webapp},${common.classpath.excludes}">
        <include name="solr-solrj-${version}.jar" />
        <include name="solr-core-${version}.jar" />
      </fileset>
    </copy>
  </target>

  <!-- nothing to do -->
  <target name="-dist-maven"/>

  <!-- nothing to do -->
  <target name="-validate-maven-dependencies"/>
</project>
