<!--
   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.
-->
<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.3"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.3 http://maven.apache.org/xsd/assembly-1.1.3.xsd">
  <id>hadoop-distro</id>
  <formats>
    <format>dir</format>
  </formats>
  <includeBaseDirectory>false</includeBaseDirectory>
  <fileSets>
    <fileSet>
      <directory>${basedir}/src/main/bin</directory>
      <outputDirectory>/bin</outputDirectory>
      <excludes>
        <exclude>*.sh</exclude>
        <exclude>*-config.cmd</exclude>
        <exclude>start-*.cmd</exclude>
        <exclude>stop-*.cmd</exclude>
        <exclude>hadoop-layout.sh.example</exclude>
      </excludes>
      <fileMode>0755</fileMode>
    </fileSet>
    <fileSet>
      <directory>${basedir}/src/main/conf</directory>
      <outputDirectory>/etc/hadoop</outputDirectory>
    </fileSet>
    <fileSet>
      <directory>${basedir}/src/main/bin</directory>
      <outputDirectory>/libexec</outputDirectory>
      <includes>
        <include>*-config.sh</include>
        <include>*-config.cmd</include>
        <include>*-functions.sh</include>
        <include>hadoop-layout.sh.example</include>
      </includes>
      <fileMode>0755</fileMode>
    </fileSet>
    <fileSet>
      <directory>${basedir}/src/main/shellprofile.d</directory>
      <outputDirectory>/libexec/shellprofile.d</outputDirectory>
      <fileMode>0755</fileMode>
    </fileSet>
    <fileSet>
      <directory>${basedir}/src/main/bin</directory>
      <outputDirectory>/sbin</outputDirectory>
      <includes>
        <include>*.sh</include>
        <include>*.cmd</include>
      </includes>
      <excludes>
        <exclude>hadoop-config.sh</exclude>
        <exclude>hadoop.cmd</exclude>
        <exclude>hdfs.cmd</exclude>
        <exclude>hadoop-config.cmd</exclude>
        <exclude>hadoop-functions.sh</exclude>
        <exclude>hadoop-layout.sh.example</exclude>
        <exclude>hdfs-config.cmd</exclude>
        <exclude>hdfs-config.sh</exclude>
      </excludes>
      <fileMode>0755</fileMode>
    </fileSet>
    <fileSet>
      <directory>${basedir}/src/main/packages</directory>
      <outputDirectory>/sbin</outputDirectory>
      <includes>
        <include>*.sh</include>
      </includes>
      <fileMode>0755</fileMode>
    </fileSet>
    <fileSet>
      <directory>${basedir}</directory>
      <outputDirectory>/share/doc/hadoop/${hadoop.component}</outputDirectory>
      <includes>
        <include>*.txt</include>
      </includes>
    </fileSet>
    <fileSet>
      <directory>${project.build.directory}/webapps</directory>
      <outputDirectory>/share/hadoop/${hadoop.component}/webapps</outputDirectory>
    </fileSet>
    <fileSet>
      <directory>${basedir}/src/main/conf</directory>
      <outputDirectory>/share/hadoop/${hadoop.component}/templates</outputDirectory>
      <includes>
        <include>*-site.xml</include>
      </includes>
    </fileSet>
    <fileSet>
      <directory>${basedir}/src/main/packages/templates/conf</directory>
      <outputDirectory>/share/hadoop/${hadoop.component}/templates/conf</outputDirectory>
      <includes>
        <include>*</include>
      </includes>
    </fileSet>
    <fileSet>
      <directory>${project.build.directory}</directory>
      <outputDirectory>/share/hadoop/${hadoop.component}</outputDirectory>
      <includes>
        <include>${project.artifactId}-${project.version}.jar</include>
        <include>${project.artifactId}-${project.version}-tests.jar</include>
      </includes>
      <excludes>
        <exclude>hadoop-tools-dist-*.jar</exclude>
      </excludes>
    </fileSet>
    <fileSet>
      <directory>${project.build.directory}</directory>
      <outputDirectory>/share/hadoop/${hadoop.component}/sources</outputDirectory>
      <includes>
        <include>${project.artifactId}-${project.version}-sources.jar</include>
        <include>${project.artifactId}-${project.version}-test-sources.jar</include>
      </includes>
    </fileSet>
    <fileSet>
      <directory>${basedir}/dev-support/jdiff</directory>
      <outputDirectory>/share/hadoop/${hadoop.component}/jdiff</outputDirectory>
    </fileSet>
    <fileSet>
      <directory>${project.build.directory}/site/jdiff/xml</directory>
      <outputDirectory>/share/hadoop/${hadoop.component}/jdiff</outputDirectory>
    </fileSet>
    <fileSet>
      <directory>${project.build.directory}/site</directory>
      <outputDirectory>/share/doc/hadoop/${hadoop.component}</outputDirectory>
    </fileSet>
    <fileSet>
      <directory>${basedir}/src/main/native/libhdfs/include/hdfs</directory>
      <includes>
        <include>hdfs.h</include>
      </includes>
      <outputDirectory>/include</outputDirectory>
    </fileSet>
  </fileSets>
  <dependencySets>
    <dependencySet>
      <outputDirectory>/share/hadoop/${hadoop.component}/lib</outputDirectory>
      <unpack>false</unpack>
      <scope>runtime</scope>
      <useProjectArtifact>false</useProjectArtifact>
      <excludes>
        <exclude>org.apache.ant:*:jar</exclude>
        <exclude>jdiff:jdiff:jar</exclude>
      </excludes>
    </dependencySet>
  </dependencySets>
</assembly>
