<?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-core" default="default" xmlns:ivy="antlib:org.apache.ivy.ant">
  <description>Solr Core</description>

  <!-- html file for testing -->
  <property name="rat.excludes" value="**/htmlStripReaderTest.html,**/*.iml"/>
  
  <property name="test.lib.dir" location="test-lib"/>

  <property name="forbidden-tests-excludes" value="
    org/apache/solr/internal/**
    org/apache/hadoop/**
  "/>

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

  <target name="compile-core" depends="compile-solrj,common-solr.compile-core"/>

  <target name="compile-test" depends="jar-analyzers-icu,-compile-test-lucene-queryparser,-compile-test-lucene-backward-codecs,-compile-analysis-extras,common-solr.compile-test"/>

  <path id="test.classpath">
    <path refid="solr.test.base.classpath"/>
    <fileset dir="${test.lib.dir}" includes="*.jar"/>
    <pathelement location="${analyzers-icu.jar}"/>
    <pathelement location="${common-solr.dir}/build/contrib/solr-analysis-extras/classes/java"/>
    <pathelement location="${common.dir}/build/queryparser/classes/test"/>
    <pathelement location="${common.dir}/build/backward-codecs/classes/test"/>
    <fileset dir="${common-solr.dir}/contrib/analysis-extras/lib" includes="icu4j*.jar"/>
  </path>

  <!-- specialized to ONLY depend on solrj -->
  <target name="javadocs" depends="compile-core,define-lucene-javadoc-url,lucene-javadocs,javadocs-solrj,check-javadocs-uptodate" unless="javadocs-uptodate-${name}">
    <sequential>
      <mkdir dir="${javadoc.dir}/${name}"/>
      <solr-invoke-javadoc>
        <solrsources>
          <packageset dir="${src.dir}"/>
        </solrsources>
        <links>
          <link href="../solr-solrj"/>
        </links>
      </solr-invoke-javadoc>
      <solr-jarify basedir="${javadoc.dir}/${name}" destfile="${build.dir}/${final.name}-javadoc.jar"/>
     </sequential>
  </target>

  <target name="-dist-maven" depends="-dist-maven-src-java"/>

  <target name="-install-to-maven-local-repo" depends="-install-src-java-to-maven-local-repo"/>

  <target name="resolve" depends="ivy-availability-check,ivy-fail,ivy-configure">
    <sequential>
      <ivy:retrieve conf="compile,compile.hadoop" type="jar,bundle" sync="${ivy.sync}" log="download-only" symlink="${ivy.symlink}"/>
      <ivy:retrieve conf="test,test.DfsMiniCluster,test.MiniKdc" type="jar,bundle,test" sync="${ivy.sync}" log="download-only" symlink="${ivy.symlink}"
                    pattern="${test.lib.dir}/[artifact]-[revision](-[classifier]).[ext]"/>
    </sequential>
  </target>

  <target name="javacc" depends="javacc-QueryParser"/>
  <target name="javacc-QueryParser" depends="resolve-javacc">
    <sequential>
      <invoke-javacc target="src/java/org/apache/solr/parser/QueryParser.jj"
                     outputDir="src/java/org/apache/solr/parser"/>

      <!-- Change the incorrect public ctors for QueryParser to be protected instead -->
      <replaceregexp file="src/java/org/apache/solr/parser/QueryParser.java"
                     byline="true"
                     match="public QueryParser\(CharStream "
                     replace="protected QueryParser(CharStream "/>
      <replaceregexp file="src/java/org/apache/solr/parser/QueryParser.java"
                     byline="true"
                     match="public QueryParser\(QueryParserTokenManager "
                     replace="protected QueryParser(QueryParserTokenManager "/>
      <!-- change an exception used for signaling to be static -->
      <replaceregexp file="src/java/org/apache/solr/parser/QueryParser.java"
                     byline="true"
                     match="final private LookaheadSuccess jj_ls ="
                     replace="static final private LookaheadSuccess jj_ls =" />
      <replace token="StringBuffer" value="StringBuilder" encoding="UTF-8">
         <fileset dir="src/java/org/apache/solr/parser" includes="ParseException.java TokenMgrError.java"/>
      </replace>

    </sequential>
  </target>
  <target name="resolve-javacc" xmlns:ivy="antlib:org.apache.ivy.ant">
    <!-- setup a "fake" JavaCC distribution folder in ${build.dir} to make JavaCC ANT task happy: -->
    <ivy:retrieve organisation="net.java.dev.javacc" module="javacc" revision="5.0"
      inline="true" transitive="false" type="jar" sync="true" symlink="${ivy.symlink}"
      pattern="${build.dir}/javacc/bin/lib/[artifact].[ext]"/>
  </target>

  <macrodef name="invoke-javacc">
    <attribute name="target"/>
    <attribute name="outputDir"/>
    <sequential>
      <mkdir dir="@{outputDir}"/>
      <delete>
        <fileset dir="@{outputDir}" includes="*.java">
          <containsregexp expression="Generated.*By.*JavaCC"/>
        </fileset>
      </delete>
      <javacc
          target="@{target}"
          outputDirectory="@{outputDir}"
          javacchome="${build.dir}/javacc"
          jdkversion="1.${javac.release}"
      />
      <fixcrlf srcdir="@{outputDir}" includes="*.java" encoding="UTF-8">
        <containsregexp expression="Generated.*By.*JavaCC"/>
      </fixcrlf>
    </sequential>
  </macrodef>


</project>
