<!--
  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="." name="apache-cassandra--rat-tasks"
         xmlns:rat="antlib:org.apache.rat.anttasks">

    <!--
      License audit tool
    -->


	  <target name="_rat_init" depends="resolver-init">
	      <typedef uri="antlib:org.apache.rat.anttasks" classpathref="rat.classpath"/>
    </target>

    <target name="_build_ratinclude" depends="_rat_init">
        <exec executable="git" failifexecutionfails="false" failonerror="false" resultproperty="git.success" output="build/.versioned_files">
            <arg line="ls-tree -r HEAD --name-only"/>
        </exec>
        <condition property="rat.skip" value="true">
            <not>
                <equals arg1="${git.success}" arg2="0"/>
            </not>
        </condition>
        <copy file="build/.versioned_files" tofile="build/.ratinclude">
            <filterchain>
                <linecontainsregexp>
                    <regexp pattern=".*\.(java|py|sh|xml|spec|md|iml|bat|btm|cql|css|g|html|jflex|jks|mod|name|pom|textile|yml|yaml|MIDRES|HIGHRES|LOWRES)$"/>
                </linecontainsregexp>
            </filterchain>
        </copy>
    </target>

    <target name="rat-check" depends="_build_ratinclude" unless="${rat.skip}" description="License checks on source" >
        <rat:report reportFile="${build.dir}/rat.txt">
            <fileset dir="." includesfile="build/.ratinclude">
                 <!-- Config files with not much creativity -->
                 <exclude name="**/ide/**/*"/>
                 <exclude name="**/metrics-reporter-config-sample.yaml"/>
                 <exclude name="**/cassandra.yaml"/>
                 <exclude name="**/cassandra-murmur.yaml"/>
                 <exclude name="**/cassandra-seeds.yaml"/>
                 <exclude NAME="**/doc/antora.yml"/>
                 <exclude name="**/test/conf/cassandra.yaml"/>
                 <exclude name="**/test/conf/cassandra_encryption.yaml"/>
                 <exclude name="**/test/conf/cdc.yaml"/>
                 <exclude name="**/test/conf/commitlog_compression_LZ4.yaml"/>
                 <exclude name="**/test/conf/commitlog_compression_Zstd.yaml"/>
                 <exclude name="**/test/conf/system_keyspaces_directory.yaml"/>
                 <exclude name="**/test/conf/unit-test-conf/test-native-port.yaml"/>
                 <exclude name="**/test/data/jmxdump/cassandra-3.0-jmx.yaml"/>
                 <exclude name="**/test/data/jmxdump/cassandra-3.11-jmx.yaml"/>
                 <exclude name="**/test/data/jmxdump/cassandra-4.0-jmx.yaml"/>
                 <exclude name="**/tools/cqlstress-counter-example.yaml"/>
                 <exclude name="**/tools/cqlstress-example.yaml"/>
                 <exclude name="**/tools/cqlstress-insanity-example.yaml"/>
                 <exclude name="**/tools/cqlstress-lwt-example.yaml"/>
                 <!-- Documentation files -->
                 <exclude NAME="**/doc/modules/**/*"/>
                 <!-- NOTICE files -->
                 <exclude NAME="**/NOTICE.md"/>
                 <!-- LICENSE files -->
                 <exclude NAME="**/LICENSE.md"/>
            </fileset>
        </rat:report>
        <exec executable="grep" outputproperty="rat.failed.files" failifexecutionfails="false">
            <arg line="-A5 'Unapproved licenses' ${build.dir}/rat.txt"/>
        </exec>
        <fail message="Some files have missing or incorrect license information. Check RAT report in ${build.dir}/rat.txt for more details! \n ${rat.failed.files}">
            <condition>
                <and>
                    <not>
                        <resourcecontains resource="${build.dir}/rat.txt" substring="0 Unknown Licenses" casesensitive="false" />
                    </not>
                </and>
            </condition>
        </fail>
    </target>

    <target name="_write_java_license_headers" depends="_rat_init">
      <java classname="org.apache.rat.Report" fork="true"
            output="${build.dir}/rat-report.log">
        <classpath refid="rat.classpath" />
        <arg value="-a" />
        <arg value="--force" />
        <arg value="interface/thrift" />
      </java>
    </target>

    <target name="write-java-license-headers" unless="without.rat" description="Add missing java license headers">
      <antcall target="_write_java_license_headers" />
    </target>

    <target name="_assert_rat_output">
        <fail message="The rat report at build/rat.txt was not generated. Please ensure that the rat-check task is able to run successfully. For dev builds only, touch build/rat.txt to skip this check">
            <condition>
                <not>
                    <available file="build/rat.txt" />
                </not>
            </condition>
        </fail>
    </target>

</project>
