<!--
 * 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.2"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2 http://maven.apache.org/xsd/assembly-1.1.2.xsd">
	<!-- Assembly file for the "standalone" tar.gz and zip SystemML releases for running on a standalone machine. -->
	<id>standalone</id>

	<formats>
		<format>tar.gz</format>
		<format>zip</format>
	</formats>

	<includeBaseDirectory>true</includeBaseDirectory>
	<baseDirectory>${artifactId}-${version}-standalone</baseDirectory>

	<fileSets>
		<fileSet>
			<directory>${basedir}/scripts</directory>
			<excludes>
				<exclude>algorithms/obsolete/*</exclude>
				<exclude>algorithms/obsolete</exclude>
				<exclude>perftest/*</exclude>
				<exclude>perftest</exclude>
				<exclude>staging/**/*</exclude>
				<exclude>staging</exclude>
				<!-- <exclude>*.sh</exclude> --> <!-- applies to sparkDML.sh -->
			</excludes>
			<outputDirectory>scripts</outputDirectory>
		</fileSet>

		<fileSet>
			<directory>${basedir}/src/main/standalone</directory>
			<includes>
				<include>log4j.properties</include>
				<include>README.txt</include>
				<include>SystemML-config.xml</include>
			</includes>
			<outputDirectory>.</outputDirectory>
		</fileSet>

		<fileSet>
			<directory>${basedir}/src/test/config/hadoop_bin_windows/bin</directory>
			<includes>
				<include>*.*</include>
			</includes>
			<outputDirectory>./lib/hadoop/bin</outputDirectory>
		</fileSet>

		<!--  Make scripts executable. -->
		<fileSet>
			<directory>${basedir}/src/main/standalone</directory>
			<includes>
				<include>*.bat</include>
				<include>*.sh</include>
			</includes>
			<outputDirectory>.</outputDirectory>
			<fileMode>0755</fileMode>
		</fileSet>

		<fileSet>
			<directory>${basedir}/src/assembly/standalone</directory>
			<includes>
				<include>LICENSE</include>
				<include>NOTICE</include>
			</includes>
			<outputDirectory>.</outputDirectory>
		</fileSet>

		<fileSet>
			<directory>${basedir}</directory>
			<includes>
				<include>DISCLAIMER</include>
			</includes>
			<outputDirectory>.</outputDirectory>
		</fileSet>
	</fileSets>

	<!--files>
		<file>
			<source>target/${artifactId}-${project.version}-standalone.jar</source>
			<outputDirectory>.</outputDirectory>
			<destName>SystemML-standalone.jar</destName>
		</file>
	</files-->

	<!-- Include all the libraries needed to run in standalone mode. -->
	<dependencySets>
		<dependencySet>
			<excludes>
				<exclude>*:${artifactId}*</exclude> <!-- exclude from base dir -->
				<!-- Exclude compile-scoped dependencies since they are in main artifact jar -->
				<exclude>*:antlr4-annotations*</exclude>
				<exclude>*:antlr4-runtime*</exclude>
				<exclude>*:guava*</exclude>
				<exclude>*:org.abego.treelayout.core*</exclude>
				<exclude>*:wink-json4j*</exclude>
			</excludes>
		</dependencySet>

		<dependencySet>
			<includes>
				<include>*:${artifactId}*</include>
				<include>*:antlr4*</include>
				<include>*:avro*</include>
				<include>*:commons-cli*</include>
				<include>*:commons-collections*</include>
				<include>*:commons-configuration*</include>
				<include>*:commons-httpclient*</include>
				<include>*:commons-lang</include>
				<include>*:commons-logging*</include>
				<include>*:commons-math3*</include>
				<include>*:hadoop-auth*</include>
				<include>*:hadoop-client*</include>
				<include>*:hadoop-common*</include>
				<include>*:hadoop-hdfs*</include>
				<include>*:hadoop-mapreduce-client*</include>
				<include>*:hadoop-yarn*</include>
				<include>*:jackson-core-asl*</include>
				<include>*:jackson-mapper-asl*</include>
				<include>*:log4j*</include>
				<include>*:opencsv*</include>
				<include>*:slf4j-api*</include>
				<include>*:slf4j-log4j*</include>
			</includes>
			<outputDirectory>./lib</outputDirectory>
			<scope>provided</scope>
		</dependencySet>
	</dependencySets>
</assembly>
