<?xml version="1.0" encoding="UTF-8"?>
<!--
	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 xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
 
  <groupId>org.apache.hawq</groupId>
  <artifactId>hawq</artifactId>
  <version>2.0</version>
  <packaging>pom</packaging>

  <build>  
    <pluginManagement>
      <plugins>
        <plugin>
          <groupId>org.apache.rat</groupId>
          <artifactId>apache-rat-plugin</artifactId>
          <version>0.11</version>
          <configuration>
            <excludes>
              <!-- 
                  This file defines the exclusion list for Apache RAT.
                  Source files from 3rd party, like Postgres, gtest, gmock, orafce, pgcrypto, pljava, 
                  will not be checked.
              -->
              <exclude>**/*.md</exclude>
              <exclude>**/*.in</exclude>
              <exclude>**/*.md5</exclude>
              <exclude>**/*.json</exclude>
              <exclude>**/*.ans</exclude>
              <exclude>**/*.sql</exclude>
              <exclude>**/*.out</exclude>
              <exclude>**/*.po</exclude>
              <exclude>**/*.map</exclude>
              <exclude>**/*.stderr</exclude>
              <exclude>**/*.stdout</exclude>
              <exclude>**/*.source</exclude>
              <exclude>**/*.txt</exclude>
              <exclude>**/*.data</exclude>
              <exclude>**/*.csv</exclude>
              <exclude>**/*.pm</exclude>
              <exclude>**/*.1</exclude>
              <exclude>**/*.sample</exclude>
              <exclude>configure</exclude>
              <exclude>config/*</exclude>
              <exclude>*version</exclude>
              <exclude>**/*.pgc</exclude>
              <exclude>**/*.cnf</exclude>
              <exclude>**/*.stx</exclude>
              <exclude>**/*.gdb</exclude>
              <exclude>**/__init__.py</exclude>
              <exclude>README-PostgreSQL</exclude>
              <exclude>contrib/gp_sparse_vector/bugs</exclude>
              <exclude>contrib/hawq-hadoop/hawq-mapreduce-tool/src/test/resources/dataset</exclude>
              <exclude>contrib/hawq-hadoop/**/*.yaml</exclude>
              <exclude>contrib/gp_sparse_vector/*output</exclude>
              <exclude>contrib/gp_sparse_vector/README*</exclude>
              <exclude>contrib/orafce/*</exclude>
              <exclude>contrib/pgcrypto/**/*</exclude>
              <exclude>doc/src/sgml/fixrtf</exclude>
              <exclude>depends/libyarn/bootstrap</exclude>
              <exclude>depends/libyarn/**/*.cmake</exclude>
              <exclude>depends/libyarn/**/*.txt</exclude>
              <exclude>depends/libyarn/gmock/**/*.cc</exclude>
              <exclude>depends/libyarn/gmock/**/*.h</exclude>
              <exclude>depends/libyarn/gmock/COPYING</exclude>
              <exclude>depends/libyarn/gtest/**/*.cc</exclude>
              <exclude>depends/libyarn/gtest/**/*.h</exclude>
              <exclude>depends/libyarn/**/Makefile</exclude>
              <exclude>doc/**/*.sgml</exclude>
              <exclude>pxf/*.gradle</exclude>
              <exclude>pxf/gradlew</exclude>
              <exclude>pxf/**/*.classpath</exclude>	 
              <exclude>src/bin/gp_workfile_mgr/*</exclude>
              <exclude>src/bin/gpfdist/src/gpfdist/glob.c</exclude>
              <exclude>src/bin/pgbench/*</exclude>
              <exclude>src/bin/scripts/common.h</exclude>
              <exclude>src/bin/gpfdist/**/include/glob.*</exclude>
              <exclude>src/bin/gpfusion/*</exclude>
              <exclude>src/bin/gpupgrade/*</exclude>
              <exclude>src/bin/i*/**/*</exclude>
              <exclude>src/bin/pg_*/**/*</exclude>
              <exclude>src/bin/psql/**/*</exclude>
              <exclude>src/bin/scripts/*.c</exclude>
              <exclude>src/DEVELOPERS</exclude>
              <exclude>src/backend/access/index/caql.files</exclude>
              <exclude>src/backend/gpopt/library.ver</exclude>
              <exclude>src/backend/libgppc/lib/Doxyfile</exclude>
              <exclude>src/backend/libgppc/lib/package/libgppc.spec</exclude>
              <exclude>src/backend/port/beos/*.c</exclude>
              <exclude>src/backend/port/tas/*.s</exclude>
              <exclude>src/backend/regex/re_syntax.n</exclude>
              <exclude>src/backend/storage/file/README_QUICKLZ</exclude>
              <exclude>src/backend/utils/mb/conversion_procs/regress_epilogue</exclude>
              <exclude>src/backend/utils/mb/conversion_procs/regress_prolog</exclude>
              <exclude>src/backend/utils/mb/Unicode/ISO10646-GB18030.TXT</exclude>
              <exclude>src/backend/utils/misc/check_guc</exclude>
              <exclude>src/backend/utils/misc/etc/slaves</exclude>
              <exclude>src/include/access/README.caql_usage</exclude>
              <exclude>src/include/catalog/README.add_catalog_function</exclude>
              <exclude>src/include/catalog/README.tidycat</exclude>
              <exclude>src/include/pg_config.h.win32</exclude>
              <exclude>src/interfaces/**/*</exclude>
              <exclude>src/tools/**/*</exclude>
              <exclude>src/tutorial/*</exclude>
              <exclude>src/pl/**/*</exclude>
              <exclude>src/port/*</exclude>
              <exclude>src/**/Makefile*</exclude>
              <exclude>src/template/*</exclude>
              <exclude>src/test/**/*</exclude>
              <exclude>src/timezone/**/*</exclude>
              <exclude>tools/bin/pythonSrc/**/*</exclude>
              <exclude>tools/bin/ext/pg8000/*</exclude>
              <exclude>tools/bin/.rcfile</exclude>
              <exclude>tools/bin/diskqual.ksh</exclude>
              <exclude>tools/bin/ext/figleaf/figleaf2html</exclude>
              <exclude>tools/bin/postgresql_conf_gp_additions</exclude>
              <exclude>tools/doc/**/*</exclude>
            </excludes>
            <licenses>
              <license implementation="org.apache.rat.analysis.license.SimplePatternBasedLicense">
                <licenseFamilyName>PostgreSQL License</licenseFamilyName>
                <licenseFamilyCategory>PGSQL</licenseFamilyCategory>
                <patterns>
                  <pattern>$PostgreSQL:</pattern>
                  <pattern>PostgreSQL Global Development Group</pattern>
                </patterns>
            </license>
            </licenses>
            <licenseFamilies>
              <licenseFamily implementation="org.apache.rat.license.SimpleLicenseFamily">
                <familyName>PostgreSQL License</familyName>
              </licenseFamily>
              <licenseFamily implementation="org.apache.rat.license.SimpleLicenseFamily">
                <familyName>Apache License Version 2.0</familyName>
              </licenseFamily>
            </licenseFamilies>
          </configuration>
        </plugin>
      </plugins>
    </pluginManagement>
  </build>
</project>
