<!--
 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="common-solr" default="default">
  <description>
    This file is designed for importing into a main build file, and not intended
    for standalone use.
  </description>

  <dirname file="${ant.file.common-solr}" property="common-solr.dir"/>
  
  <property name="Name" value="Solr" />
  <property name="version" value="4.0-SNAPSHOT"/>
  <property name="fullname" value="apache-${ant.project.name}"/>
  <property name="fullnamever" value="${fullname}-${version}"/>
  <property name="final.name" value="${fullnamever}"/>
  
  <!-- solr uses 1.6 -->
  <property name="javac.source" value="1.6"/>
  <property name="javac.target" value="1.6"/>
  
  <property name="dest" value="${common-solr.dir}/build" />
  <property name="build.dir" location="${dest}/${ant.project.name}"/>
  <property name="dist" location="${common-solr.dir}/dist"/>
  <property name="package.dir" location="${common-solr.dir}/package"/>
  <property name="maven.dist.dir" location="${package.dir}/maven"/>
  <property name="lucene-libs" location="${dest}/lucene-libs" />
  <property name="manifest.file" location="${dest}/META-INF/MANIFEST.MF"/>
  <property name="tests.userdir" value="src/test-files"/>
  <property name="example" value="${common-solr.dir}/example" />
  <property name="javadoc.dir" location="${build.dir}/docs/api"/>
  <property name="javadoc.link" value="http://java.sun.com/javase/6/docs/api/"/>
  <property name="tests.loggingfile" value="${common-solr.dir}/testlogging.properties"/>
  <property name="tests.threadspercpu" value="2"/>
  <property name="tests.cleanthreads.sysprop" value="perClass"/>

  <property name="clover.db.dir" location="${dest}/tests/clover/db"/>
  <property name="clover.report.dir" location="${dest}/tests/clover/reports"/>
  <available property="clover.present" classname="com.cenqua.clover.tasks.CloverReportTask"/>
  <condition property="clover.enabled">
    <and>
      <isset property="run.clover"/>
      <isset property="clover.present"/>
    </and>
  </condition>

  <path id="additional.dependencies">
  	<fileset dir="${common-solr.dir}/lib" includes="**/*.jar"/>
  	<fileset dir="${common-solr.dir}/example/lib" includes="**/*.jar"/>
  	<fileset dir="lib" includes="**/*.jar" erroronmissingdir="false"/>
  </path>

  <pathconvert property="project.classpath" targetos="unix" refid="additional.dependencies"/>

  <import file="${common-solr.dir}/../lucene/contrib/contrib-build.xml"/>

  <!-- Solr Specification Version

       This will be used in the Manifest file, and therefore must
       match the pattern "digit+{.digit+}*"

       By default, this should be set to "X.Y.M.${dateversion}"
       where X.Y.M is the last version released (on this branch).
    -->
  <property name="solr.spec.version" value="4.0.0.${dateversion}" />

  <path id="solr.base.classpath">
  	<pathelement path="${analyzers-common.jar}"/>
  	<pathelement path="${analyzers-phonetic.jar}"/>
  	<pathelement path="${highlighter.jar}"/>
  	<pathelement path="${memory.jar}"/>
  	<pathelement path="${misc.jar}"/>
  	<pathelement path="${spatial.jar}"/>
  	<pathelement path="${suggest.jar}"/>
    <pathelement path="${grouping.jar}"/>
    <pathelement path="${queries.jar}"/>
    <pathelement path="${queryparser.jar}"/>
    <pathelement location="${common-solr.dir}/build/solr-solrj/classes/java"/>
    <pathelement location="${common-solr.dir}/build/solr-core/classes/java"/>
    <path refid="base.classpath"/>
  </path>

  <path id="classpath" refid="solr.base.classpath"/>

  <path id="solr.test.base.classpath">
    <pathelement path="${common-solr.dir}/build/solr-test-framework/classes/java"/>
  	<pathelement path="${tests.userdir}"/>
  	<path refid="test.base.classpath"/>
  </path>
 
  <path id="test.classpath" refid="solr.test.base.classpath"/>

  <macrodef name="solr-contrib-uptodate">
    <attribute name="name"/>
    <attribute name="property" default="@{name}.uptodate"/>
    <attribute name="classpath.property" default="@{name}.jar"/>
    <!-- set jarfile only, if the target jar file has no generic name -->
    <attribute name="jarfile" default="${common-solr.dir}/build/contrib/solr-@{name}/apache-solr-@{name}-${version}.jar"/>
    <sequential>
      <!--<echo message="Checking '@{jarfile}' against source folder '${common.dir}/contrib/@{name}/src/java'"/>-->
      <property name="@{classpath.property}" location="@{jarfile}"/>
      <uptodate property="@{property}" targetfile="@{jarfile}">
        <srcfiles dir="${common-solr.dir}/contrib/@{name}/src/java" includes="**/*.java"/>
      </uptodate>
    </sequential>
  </macrodef>

  <target name="validate" depends="validate-solr"/>
  <target name="validate-solr" depends="check-legal-solr" unless="validated-solr.uptodate"/>

  <target name="check-legal-solr" depends="compile-tools">
    <java classname="org.apache.lucene.validation.DependencyChecker" failonerror="true" fork="true">
      <classpath>
        <path refid="tools.runtime.classpath" />
      </classpath>
      <!-- TODO: it might be better to just automatically find all directories that contain jar files, but that could take a
       long time.  This should be faster, but we could miss a directory
       -->
      <!-- Solr -->
      <arg value="-c" />
      <arg value="${common-solr.dir}/lib" />
      <arg value="-c" />
      <arg value="${common-solr.dir}/contrib/analysis-extras/lib" />
      <arg value="-c" />
      <arg value="${common-solr.dir}/contrib/clustering/lib" />
      <arg value="-c" />
      <arg value="${common-solr.dir}/contrib/dataimporthandler/lib" />
      <arg value="-c" />
      <arg value="${common-solr.dir}/contrib/dataimporthandler-extras/lib" />
      <arg value="-c" />
      <arg value="${common-solr.dir}/contrib/extraction/lib" />
      <arg value="-c" />
      <arg value="${common-solr.dir}/contrib/uima/lib" />
      <arg value="-c" />
      <arg value="${common-solr.dir}/example/example-DIH/solr/db/lib" />
      <arg value="-c" />
      <arg value="${common-solr.dir}/example/example-DIH/solr/mail/lib" />
      <arg value="-c" />
      <arg value="${common-solr.dir}/example/example/lib" />
      <arg value="-c" />
      <arg value="${common-solr.dir}/core/src/test-files/solr/lib" />
    </java>
    <property name="validated-solr.uptodate" value="true"/>
  </target>
  <path id="tools.runtime.classpath">
    <pathelement location="${common.dir}/build/classes/tools"/>
  </path>

  <target name="init-dist" >
    <mkdir dir="${build.dir}"/>
    <mkdir dir="${package.dir}"/>
    <mkdir dir="${dist}"/>
    <mkdir dir="${maven.dist.dir}"/>
  </target>

  <target name="prep-lucene-jars" 
  	      depends="jar-lucene-core, jar-analyzers-phonetic, jar-suggest, jar-highlighter, jar-memory,
  	               jar-misc, jar-spatial, jar-grouping, jar-queries, jar-queryparser">
  	  <property name="solr.deps.compiled" value="true"/>
  </target>
	
  <target name="lucene-jars-to-solr" depends="prep-lucene-jars">
    <!-- TODO: clean this up -->
    <sequential>
    <ant dir="${common.dir}" target="default" inheritall="false">
      <propertyset refid="uptodate.and.compiled.properties"/>
    </ant>
    <copy todir="${lucene-libs}" preservelastmodified="true" flatten="true" failonerror="true" overwrite="true">
      <fileset file="${lucene-core.jar}" />
      <fileset file="${analyzers-common.jar}" />
      <fileset file="${analyzers-phonetic.jar}" />
      <fileset file="${suggest.jar}" />
      <fileset file="${grouping.jar}" />
      <fileset file="${queries.jar}" />
      <fileset file="${queryparser.jar}" />
      <fileset file="${highlighter.jar}" />
      <fileset file="${memory.jar}" />
      <fileset file="${misc.jar}" />
      <fileset file="${spatial.jar}" />
    </copy>
    </sequential>
  </target>

  <!-- Shared core/solrj/test-framework/contrib targets -->
  <target name="jar-core" depends="compile-core">
    <mkdir dir="${dest}/META-INF/"/>
    <jarify title="Apache Solr Search Server: ${ant.project.name}"
            metainf.source.dir="${common-solr.dir}"
            implementation.title="org.apache.solr"
            spec.version="${solr.spec.version}"/>
  </target>

  <target name="compile-core" depends="prep-lucene-jars,common.compile-core"/>
  <target name="compile-test" depends="compile-solr-test-framework,common.compile-test"/>

  <target name="dist" depends="jar-core">
    <copy file="${build.dir}/${fullnamever}.jar" todir="${dist}"/>
  </target>

  <target name="javadocs" depends="compile-core">
   	<sequential>
      <mkdir dir="${javadoc.dir}"/>
      <mkdir dir="${dest}/META-INF/"/>
      <invoke-javadoc destdir="${javadoc.dir}"
                      title="${Name} ${version} ${name} API">
        <sources>
          <link href=""/>
          <packageset dir="${src.dir}"/>
        </sources>
      </invoke-javadoc>
      <jarify basedir="${javadoc.dir}"
              destfile="${build.dir}/${final.name}-javadoc.jar"
              title="Apache Solr Search Server: ${ant.project.name}"
              metainf.source.dir="${common-solr.dir}"
              implementation.title="org.apache.solr"
              spec.version="${solr.spec.version}"/>
     </sequential>
  </target>

  <target name="jar-src" depends="init">
  	<jarify basedir="${src.dir}"
            destfile="${build.dir}/${final.name}-src.jar"
            implementation.title="org.apache.solr"
            metainf.source.dir="${common-solr.dir}"
            spec.version="${solr.spec.version}"/>
  </target>

  <!-- Solr core targets -->
  <target name="compile-solr-core" description="Compile Solr core." unless="solr.core.compiled">
    <ant dir="${common-solr.dir}/core" target="compile-core" inheritAll="false">
      <propertyset refid="uptodate.and.compiled.properties"/>
    </ant>
    <property name="solr.core.compiled" value="true"/>
  </target>
  <target name="compile-test-solr-core" description="Compile solr core tests">
    <ant dir="${common-solr.dir}/core" target="compile-test" inheritAll="false">
      <propertyset refid="uptodate.and.compiled.properties"/>
    </ant>
    <property name="solr.core.compiled" value="true"/>
  </target>
  <target name="dist-core" depends="init-dist"
          description="Creates the Solr JAR Distribution file.">
    <ant dir="${common-solr.dir}/core" target="dist" inheritall="false">
      <propertyset refid="uptodate.and.compiled.properties"/>
    </ant>
  </target>

  <!-- Solrj targets -->
  <target name="compile-solrj" description="Compile the java client." unless="solrj.compiled">
    <ant dir="${common-solr.dir}/solrj" target="compile-core" inheritAll="false">
      <propertyset refid="uptodate.and.compiled.properties"/>
    </ant>
    <property name="solrj.compiled" value="true"/>
  </target>
  <target name="compile-test-solrj" description="Compile java client tests">
    <ant dir="${common-solr.dir}/solrj" target="compile-test" inheritAll="false">
      <propertyset refid="uptodate.and.compiled.properties"/>
    </ant>
    <property name="solrj.compiled" value="true"/>
  </target>
  <target name="dist-solrj" depends="init-dist"
          description="Creates the Solr-J JAR Distribution file.">
    <ant dir="${common-solr.dir}/solrj" target="dist" inheritall="false">
      <propertyset refid="uptodate.and.compiled.properties"/>
    </ant>
  </target>

  <!-- Solr test-framework targets -->
  <target name="compile-solr-test-framework" description="Compile the Solr test-framework" unless="solr.test.framework.compiled">
    <ant dir="${common-solr.dir}/test-framework" target="compile-core" inheritAll="false">
      <propertyset refid="uptodate.and.compiled.properties"/>
    </ant>
  	<property name="solr.core.compiled" value="true"/>
    <property name="solr.test.framework.compiled" value="true"/>
  </target>

  <!-- Solr contrib targets -->
  <target name="compile-contrib" description="Compile contrib modules">
  	<contrib-crawl target="compile-core"/>
  </target>
  <target name="compile-test-contrib" description="Compile contrib modules' tests">
  	<contrib-crawl target="compile-test"/>
  </target>

  <target name="contribs-add-to-war">
    <mkdir dir="${dest}/web"/>
    <delete dir="${dest}/web" includes="**/*" failonerror="false"/>
    <contrib-crawl target="add-to-war"/>
  </target>
</project>
