<!--
 * 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 main jar file -->
	<!-- NOTE: The reason for this assembly is that the main jar has compile-scope dependencies included.
	     As a result, the NOTICE and LICENSE files need to reflect these compile-scope dependencies. -->
	<id>main-jar</id>

	<formats>
		<format>jar</format>
	</formats>

	<includeBaseDirectory>false</includeBaseDirectory>

	<fileSets>

		<fileSet>
			<directory>${basedir}/src/assembly/jar</directory>
			<includes>
				<include>LICENSE</include>
				<include>NOTICE</include>
			</includes>
			<outputDirectory>./META-INF</outputDirectory>
		</fileSet>

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

	<dependencySets>
		<dependencySet>
			<includes>
				<include>*:systemml*</include>
			</includes>
			<unpackOptions>
				<excludes>
					<exclude>META-INF/LICENSE</exclude>
					<exclude>META-INF/NOTICE</exclude>
				</excludes>
			</unpackOptions>
			<outputDirectory>.</outputDirectory>
			<scope>provided</scope>
			<unpack>true</unpack>
		</dependencySet>
	</dependencySets>

</assembly>
