<?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-dist</artifactId>
    <version>0.23.3</version>
    <relativePath>../../hadoop-project-dist</relativePath>
  </parent>
  <groupId>org.apache.hadoop</groupId>
  <artifactId>hadoop-common</artifactId>
  <version>0.23.3</version>
  <description>Apache Hadoop Common</description>
  <name>Apache Hadoop Common</name>
  <packaging>jar</packaging>

  <properties>
    <snappy.prefix>/usr/local</snappy.prefix>
    <snappy.lib>${snappy.prefix}/lib</snappy.lib>
    <bundle.snappy>false</bundle.snappy>
    
    <hadoop.component>common</hadoop.component>
    <is.hadoop.component>true</is.hadoop.component>
  </properties>

  <dependencies>
    <dependency>
      <groupId>org.apache.hadoop</groupId>
      <artifactId>hadoop-annotations</artifactId>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>com.google.guava</groupId>
      <artifactId>guava</artifactId>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>commons-cli</groupId>
      <artifactId>commons-cli</artifactId>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>org.apache.commons</groupId>
      <artifactId>commons-math</artifactId>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>xmlenc</groupId>
      <artifactId>xmlenc</artifactId>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>commons-httpclient</groupId>
      <artifactId>commons-httpclient</artifactId>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>commons-codec</groupId>
      <artifactId>commons-codec</artifactId>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>commons-net</groupId>
      <artifactId>commons-net</artifactId>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>commons-io</groupId>
      <artifactId>commons-io</artifactId>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>servlet-api</artifactId>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>org.mortbay.jetty</groupId>
      <artifactId>jetty</artifactId>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>org.mortbay.jetty</groupId>
      <artifactId>jetty-util</artifactId>
      <scope>compile</scope>
    </dependency>

    <dependency>
      <groupId>asm</groupId>
      <artifactId>asm</artifactId>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>com.sun.jersey</groupId>
      <artifactId>jersey-core</artifactId>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>com.sun.jersey</groupId>
      <artifactId>jersey-json</artifactId>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>com.sun.jersey</groupId>
      <artifactId>jersey-server</artifactId>
      <scope>compile</scope>
    </dependency>

    <dependency>
      <groupId>tomcat</groupId>
      <artifactId>jasper-compiler</artifactId>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>tomcat</groupId>
      <artifactId>jasper-runtime</artifactId>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>javax.servlet.jsp</groupId>
      <artifactId>jsp-api</artifactId>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>commons-el</groupId>
      <artifactId>commons-el</artifactId>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>commons-logging</groupId>
      <artifactId>commons-logging</artifactId>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>commons-logging</groupId>
      <artifactId>commons-logging-api</artifactId>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>log4j</groupId>
      <artifactId>log4j</artifactId>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>net.java.dev.jets3t</groupId>
      <artifactId>jets3t</artifactId>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>org.apache.mina</groupId>
      <artifactId>mina-core</artifactId>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.apache.ftpserver</groupId>
      <artifactId>ftplet-api</artifactId>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.apache.ftpserver</groupId>
      <artifactId>ftpserver-core</artifactId>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.apache.ftpserver</groupId>
      <artifactId>ftpserver-deprecated</artifactId>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>commons-lang</groupId>
      <artifactId>commons-lang</artifactId>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>commons-collections</groupId>
      <artifactId>commons-collections</artifactId>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>commons-configuration</groupId>
      <artifactId>commons-configuration</artifactId>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-api</artifactId>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-log4j12</artifactId>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>org.eclipse.jdt</groupId>
      <artifactId>core</artifactId>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>oro</groupId>
      <artifactId>oro</artifactId>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>org.codehaus.jackson</groupId>
      <artifactId>jackson-mapper-asl</artifactId>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>org.aspectj</groupId>
      <artifactId>aspectjrt</artifactId>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>org.mockito</groupId>
      <artifactId>mockito-all</artifactId>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.apache.avro</groupId>
      <artifactId>avro</artifactId>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>org.apache.avro</groupId>
      <artifactId>avro-ipc</artifactId>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>net.sf.kosmosfs</groupId>
      <artifactId>kfs</artifactId>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>org.apache.ant</groupId>
      <artifactId>ant</artifactId>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>com.google.protobuf</groupId>
      <artifactId>protobuf-java</artifactId>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>org.apache.hadoop</groupId>
      <artifactId>hadoop-auth</artifactId>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>com.googlecode.json-simple</groupId>
      <artifactId>json-simple</artifactId>
      <scope>compile</scope>
    </dependency>
  </dependencies>

  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.avro</groupId>
        <artifactId>avro-maven-plugin</artifactId>
        <executions>
          <execution>
            <id>generate-avro-test-sources</id>
            <phase>generate-test-sources</phase>
            <goals>
              <goal>schema</goal>
              <goal>protocol</goal>
            </goals>
          </execution>
        </executions>
        <configuration>
          <testOutputDirectory>${project.build.directory}/generated-test-sources/java</testOutputDirectory>
        </configuration>
      </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-antrun-plugin</artifactId>
        <executions>
          <execution>
            <id>compile-proto</id>
            <phase>generate-sources</phase>
            <goals>
              <goal>run</goal>
            </goals>
            <configuration>
              <target>
                <echo file="target/compile-proto.sh">
                    PROTO_DIR=src/main/proto
                    JAVA_DIR=target/generated-sources/java
                    which cygpath 2&gt; /dev/null
                    if [ $? = 1 ]; then
                      IS_WIN=false
                    else
                      IS_WIN=true
                      WIN_PROTO_DIR=`cygpath --windows $PROTO_DIR`
                      WIN_JAVA_DIR=`cygpath --windows $JAVA_DIR`
                    fi
                    mkdir -p $JAVA_DIR 2&gt; /dev/null
                    for PROTO_FILE in `ls $PROTO_DIR/*.proto 2&gt; /dev/null`
                    do
                        if [ "$IS_WIN" = "true" ]; then
                          protoc -I$WIN_PROTO_DIR --java_out=$WIN_JAVA_DIR $PROTO_FILE
                        else
                          protoc -I$PROTO_DIR --java_out=$JAVA_DIR $PROTO_FILE
                        fi
                    done
                </echo>
                <exec executable="sh" dir="${basedir}" failonerror="true">
                  <arg line="target/compile-proto.sh"/>
                </exec>
              </target>
            </configuration>
          </execution>
          <execution>
            <id>compile-test-proto</id>
            <phase>generate-test-sources</phase>
            <goals>
              <goal>run</goal>
            </goals>
            <configuration>
              <target>
                <echo file="target/compile-test-proto.sh">
                    PROTO_DIR=src/test/proto
                    JAVA_DIR=target/generated-test-sources/java
                    which cygpath 2&gt; /dev/null
                    if [ $? = 1 ]; then
                      IS_WIN=false
                    else
                      IS_WIN=true
                      WIN_PROTO_DIR=`cygpath --windows $PROTO_DIR`
                      WIN_JAVA_DIR=`cygpath --windows $JAVA_DIR`
                    fi
                    mkdir -p $JAVA_DIR 2&gt; /dev/null
                    for PROTO_FILE in `ls $PROTO_DIR/*.proto 2&gt; /dev/null`
                    do
                        if [ "$IS_WIN" = "true" ]; then
                          protoc -I$WIN_PROTO_DIR --java_out=$WIN_JAVA_DIR $PROTO_FILE
                        else
                          protoc -I$PROTO_DIR --java_out=$JAVA_DIR $PROTO_FILE
                        fi
                    done
                </echo>
                <exec executable="sh" dir="${basedir}" failonerror="true">
                  <arg line="target/compile-test-proto.sh"/>
                </exec>
              </target>
            </configuration>
          </execution>
          <execution>
            <id>save-version</id>
            <phase>generate-sources</phase>
            <goals>
              <goal>run</goal>
            </goals>
            <configuration>
              <target>
                <mkdir dir="${project.build.directory}/generated-sources/java"/>
                <exec executable="sh">
                  <arg
                      line="${basedir}/dev-support/saveVersion.sh ${project.version} ${project.build.directory}/generated-sources/java"/>
                </exec>
              </target>
            </configuration>
          </execution>
          <execution>
            <id>generate-test-sources</id>
            <phase>generate-test-sources</phase>
            <goals>
              <goal>run</goal>
            </goals>
            <configuration>
              <target>

                <mkdir dir="${project.build.directory}/generated-test-sources/java"/>

                <taskdef name="recordcc" classname="org.apache.hadoop.record.compiler.ant.RccTask">
                  <classpath refid="maven.compile.classpath"/>
                </taskdef>
                <recordcc destdir="${project.build.directory}/generated-test-sources/java">
                  <fileset dir="${basedir}/src/test/ddl" includes="**/*.jr"/>
                </recordcc>
              </target>
            </configuration>
          </execution>
          <execution>
            <id>create-log-dir</id>
            <phase>process-test-resources</phase>
            <goals>
              <goal>run</goal>
            </goals>
            <configuration>
              <target>
                <!--
                TODO: there are tests (TestLocalFileSystem#testCopy) that fail if data
                TODO: from a previous run is present
                -->
                <delete dir="${test.build.data}"/>
                <mkdir dir="${test.build.data}"/>
                <mkdir dir="${hadoop.log.dir}"/>

                <copy toDir="${project.build.directory}/test-classes">
                  <fileset dir="${basedir}/src/main/conf"/>
                </copy>
              </target>
            </configuration>
          </execution>
          <execution>
            <phase>pre-site</phase>
            <goals>
              <goal>run</goal>
            </goals>
            <configuration>
              <tasks>
                <copy file="src/main/resources/core-default.xml" todir="src/site/resources"/>
                <copy file="src/main/xsl/configuration.xsl" todir="src/site/resources"/>
              </tasks>
            </configuration>
          </execution>
        </executions>
      </plugin>
      <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>build-helper-maven-plugin</artifactId>
        <executions>
          <execution>
            <id>add-source</id>
            <phase>generate-sources</phase>
            <goals>
              <goal>add-source</goal>
            </goals>
            <configuration>
              <sources>
                <source>${project.build.directory}/generated-sources/java</source>
              </sources>
            </configuration>
          </execution>
          <execution>
            <id>add-test-source</id>
            <phase>generate-sources</phase>
            <goals>
              <goal>add-test-source</goal>
            </goals>
            <configuration>
              <sources>
                <source>${project.build.directory}/generated-test-sources/java</source>
              </sources>
            </configuration>
          </execution>
        </executions>
      </plugin>
      <plugin>
        <groupId>org.apache.rat</groupId>
        <artifactId>apache-rat-plugin</artifactId>
        <configuration>
          <excludes>
            <exclude>CHANGES.txt</exclude>
            <exclude>.idea/**</exclude>
            <exclude>src/main/conf/*</exclude>
            <exclude>src/main/docs/**</exclude>
            <exclude>dev-support/jdiff/**</exclude>
            <exclude>src/main/native/*</exclude>
            <exclude>src/main/native/config/*</exclude>
            <exclude>src/main/resources/META-INF/services/org.apache.hadoop.security.SecurityInfo</exclude>
            <exclude>src/main/native/m4/*</exclude>
            <exclude>src/test/empty-file</exclude>
            <exclude>src/test/all-tests</exclude>
          </excludes>
        </configuration>
      </plugin>
    </plugins>
  </build>

  <profiles>
    <profile>
      <id>native</id>
      <activation>
        <activeByDefault>false</activeByDefault>
      </activation>
      <properties>
        <snappy.prefix>/usr/local</snappy.prefix>
        <snappy.lib>${snappy.prefix}/lib</snappy.lib>
        <snappy.include>${snappy.prefix}/include</snappy.include>
      </properties>
      <build>
        <plugins>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-antrun-plugin</artifactId>
            <executions>
              <execution>
                <id>compile</id>
                <phase>compile</phase>
                <goals>
                  <goal>run</goal>
                </goals>
                <configuration>
                  <target>
                    <mkdir dir="${project.build.directory}/native/javah"/>
                    <copy toDir="${project.build.directory}/native">
                      <fileset dir="${basedir}/src/main/native"/>
                    </copy>
                    <mkdir dir="${project.build.directory}/native/m4"/>
                  </target>
                </configuration>
              </execution>
            </executions>
          </plugin>
          <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>native-maven-plugin</artifactId>
            <executions>
              <execution>
                <phase>compile</phase>
                <goals>
                  <goal>javah</goal>
                </goals>
                <configuration>
                  <javahPath>${env.JAVA_HOME}/bin/javah</javahPath>
                  <javahClassNames>
                    <javahClassName>org.apache.hadoop.io.compress.zlib.ZlibCompressor</javahClassName>
                    <javahClassName>org.apache.hadoop.io.compress.zlib.ZlibDecompressor</javahClassName>
                    <javahClassName>org.apache.hadoop.security.JniBasedUnixGroupsMapping</javahClassName>
                    <javahClassName>org.apache.hadoop.io.nativeio.NativeIO</javahClassName>
                    <javahClassName>org.apache.hadoop.security.JniBasedUnixGroupsNetgroupMapping</javahClassName>
                    <javahClassName>org.apache.hadoop.io.compress.snappy.SnappyCompressor</javahClassName>
                    <javahClassName>org.apache.hadoop.io.compress.snappy.SnappyDecompressor</javahClassName>
                    <javahClassName>org.apache.hadoop.io.compress.lz4.Lz4Compressor</javahClassName>
                    <javahClassName>org.apache.hadoop.io.compress.lz4.Lz4Decompressor</javahClassName>
                    <javahClassName>org.apache.hadoop.util.NativeCrc32</javahClassName>
                  </javahClassNames>
                  <javahOutputDirectory>${project.build.directory}/native/javah</javahOutputDirectory>
                </configuration>
              </execution>
            </executions>
          </plugin>
          <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>make-maven-plugin</artifactId>
            <executions>
              <execution>
                <id>compile</id>
                <phase>compile</phase>
                <goals>
                  <goal>autoreconf</goal>
                  <goal>configure</goal>
                  <goal>make-install</goal>
                </goals>
              </execution>
            </executions>
            <configuration>
              <!-- autoreconf settings -->
              <workDir>${project.build.directory}/native</workDir>
              <arguments>
                <argument>-i</argument>
                <argument>-f</argument>
              </arguments>

              <!-- configure settings -->
              <configureEnvironment>
                <property>
                  <name>OS_NAME</name>
                  <value>${os.name}</value>
                </property>
                <property>
                  <name>OS_ARCH</name>
                  <value>${os.arch}</value>
                </property>
                <property>
                  <name>JVM_DATA_MODEL</name>
                  <value>${sun.arch.data.model}</value>
                </property>
              </configureEnvironment>
              <configureOptions>
                <configureOption>CPPFLAGS=-I${snappy.include}</configureOption>
                <configureOption>LDFLAGS=-L${snappy.lib}</configureOption>
              </configureOptions>
              <configureWorkDir>${project.build.directory}/native</configureWorkDir>
              <prefix>/usr/local</prefix>

              <!-- make settings -->
              <installEnvironment>
                <property>
                  <name>OS_NAME</name>
                  <value>${os.name}</value>
                </property>
                <property>
                  <name>OS_ARCH</name>
                  <value>${os.arch}</value>
                </property>
                <property>
                  <name>JVM_DATA_MODEL</name>
                  <value>${sun.arch.data.model}</value>
                </property>
                <property>
                  <name>HADOOP_NATIVE_SRCDIR</name>
                  <value>${project.build.directory}/native</value>
                </property>
              </installEnvironment>

              <!-- configure & make settings -->
              <destDir>${project.build.directory}/native/target</destDir>

            </configuration>
          </plugin>
        </plugins>
      </build>
    </profile>
  </profiles>
</project>
