<?xml version="1.0" encoding="UTF-8"?>
<!--
  Licensed 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. See accompanying LICENSE file.
-->
<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/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <parent>
    <groupId>org.apache.hadoop</groupId>
    <artifactId>hadoop-project</artifactId>
    <version>3.0.0-SNAPSHOT</version>
    <relativePath>../hadoop-project</relativePath>
  </parent>
  <groupId>org.apache.hadoop</groupId>
  <artifactId>hadoop-dist</artifactId>
  <version>3.0.0-SNAPSHOT</version>
  <description>Apache Hadoop Distribution</description>
  <name>Apache Hadoop Distribution</name>
  <packaging>jar</packaging>

  <!-- Using dependencies to ensure this module is the last one -->
  <dependencies>
    <dependency>
      <groupId>org.apache.hadoop</groupId>
      <artifactId>hadoop-common</artifactId>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>org.apache.hadoop</groupId>
      <artifactId>hadoop-hdfs</artifactId>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>org.apache.hadoop</groupId>
      <artifactId>hadoop-mapreduce-client-app</artifactId>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>org.apache.hadoop</groupId>
      <artifactId>hadoop-yarn-api</artifactId>
      <scope>provided</scope>
    </dependency>
  </dependencies>

  <build>
    <plugins>
      <plugin>
        <artifactId>maven-deploy-plugin</artifactId>
        <configuration>
          <skip>true</skip>
        </configuration>
      </plugin>
      <plugin>
        <groupId>org.apache.rat</groupId>
        <artifactId>apache-rat-plugin</artifactId>
        <configuration>
        </configuration>
      </plugin>
    </plugins>
  </build>

  <profiles>
    <profile>
      <id>dist</id>
      <activation>
        <activeByDefault>false</activeByDefault>
        <property>
          <name>tar</name>
        </property>
      </activation>
      <build>
        <plugins>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-antrun-plugin</artifactId>
            <executions>
              <execution>
                <id>dist</id>
                <phase>prepare-package</phase>
                <goals>
                  <goal>run</goal>
                </goals>
                <configuration>
                  <target>
                    <echo file="${project.build.directory}/dist-layout-stitching.sh">
                      run() {
                        echo "\$ ${@}"
                        "${@}"
                        res=$?
                        if [ $res != 0 ]; then
                          echo
                          echo "Failed!"
                          echo
                          exit $res
                        fi
                      }

                      findFileInDir(){
                        local file="$1";
                        local dir="${2:-./share}";
                        local count=$(find "$dir" -iname "$file"|wc -l)
                        echo "$count";
                      }

                      copyIfNotExists(){
                        local src="$1"
                        local srcName=$(basename "$src")
                        local dest="$2";
                        if [ -f "$src" ]; then
                          if [[ "$srcName" != *.jar ]] || [ $(findFileInDir "$srcName") -eq "0" ]; then
                            local destDir=$(dirname "$dest")
                            mkdir -p "$destDir"
                            cp "$src" "$dest"
                          fi
                        else
                          for childPath in "$src"/* ;
                          do
                            child=$(basename "$childPath");
                            if [ "$child" == "doc" ] || [ "$child" == "webapps" ]; then
                              mkdir -p "$dest"/"$child"
                              cp -r "$src"/"$child"/* "$dest"/"$child"
                              continue;
                            fi
                            copyIfNotExists "$src"/"$child" "$dest"/"$child"
                          done
                        fi
                      }

                      #Copy all contents as is except the lib.
                      #for libs check for existence in share directory, if not exist then only copy.
                      copy(){
                        local src="$1";
                        local dest="$2";
                        if [ -d "$src" ]; then
                          for childPath in "$src"/* ;
                          do
                            child=$(basename "$childPath");
                            if [ "$child" == "share" ]; then
                              copyIfNotExists "$src"/"$child" "$dest"/"$child"
                            else
                              if [ -d "$src"/"$child" ]; then
                                mkdir -p "$dest"/"$child"
                                cp -r "$src"/"$child"/* "$dest"/"$child"
                              else
                                cp -r "$src"/"$child" "$dest"/"$child"
                              fi
                            fi
                          done
                        fi
                      }

                      # Shellcheck SC2086
                      ROOT=$(cd "${project.build.directory}"/../..;pwd)
                      echo
                      echo "Current directory $(pwd)"
                      echo
                      run rm -rf hadoop-${project.version}
                      run mkdir hadoop-${project.version}
                      run cd hadoop-${project.version}
                      run cp "$ROOT"/LICENSE.txt .
                      run cp "$ROOT"/NOTICE.txt .
                      run cp "$ROOT"/README.txt .

                      # Copy hadoop-common first so that it have always have all dependencies.
                      # Remaining projects will copy only libraries which are not present already in 'share' directory.
                      run copy "$ROOT"/hadoop-common-project/hadoop-common/target/hadoop-common-${project.version} .
                      run copy "$ROOT"/hadoop-common-project/hadoop-nfs/target/hadoop-nfs-${project.version} .
                      run copy "$ROOT"/hadoop-hdfs-project/hadoop-hdfs/target/hadoop-hdfs-${project.version} .
                      run copy "$ROOT"/hadoop-hdfs-project/hadoop-hdfs-nfs/target/hadoop-hdfs-nfs-${project.version} .
                      run copy "$ROOT"/hadoop-yarn-project/target/hadoop-yarn-project-${project.version} .
                      run copy "$ROOT"/hadoop-mapreduce-project/target/hadoop-mapreduce-${project.version} .
                      run copy "$ROOT"/hadoop-tools/hadoop-tools-dist/target/hadoop-tools-dist-${project.version} .

                      #copy httpfs and kms as is
                      run cp -r "$ROOT"/hadoop-hdfs-project/hadoop-hdfs-httpfs/target/hadoop-hdfs-httpfs-${project.version}/* .
                      run cp -r "$ROOT"/hadoop-common-project/hadoop-kms/target/hadoop-kms-${project.version}/* .

                      echo
                      echo "Hadoop dist layout available at: ${project.build.directory}/hadoop-${project.version}"
                      echo
                    </echo>
                    <exec executable="${shell-executable}" dir="${project.build.directory}" failonerror="true">
                      <arg line="./dist-layout-stitching.sh"/>
                    </exec>
                  </target>
                </configuration>
              </execution>
              <execution>
                <id>tar</id>
                <phase>package</phase>
                <goals>
                  <goal>run</goal>
                </goals>
                <configuration>
                  <target if="tar">
                    <echo file="${project.build.directory}/dist-tar-stitching.sh">
                      run() {
                        echo "\$ ${@}"
                        "${@}"
                        res=$?
                        if [ $res != 0 ]; then
                          echo
                          echo "Failed!"
                          echo
                          exit $res
                        fi
                      }

                      run tar cf hadoop-${project.version}.tar hadoop-${project.version}
                      run gzip -f hadoop-${project.version}.tar
                      echo
                      echo "Hadoop dist tar available at: ${project.build.directory}/hadoop-${project.version}.tar.gz"
                      echo
                    </echo>
                    <exec executable="${shell-executable}" dir="${project.build.directory}" failonerror="true">
                      <arg line="./dist-tar-stitching.sh"/>
                    </exec>
                  </target>
                </configuration>
              </execution>
            </executions>
          </plugin>
        </plugins>
      </build>
    </profile>
  </profiles>

</project>
