<!--
  ~ 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.0"
		xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
		xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0 http://maven.apache.org/xsd/assembly-1.1.0.xsd">
	<id>bin</id>
	<formats>
		<format>tar.gz</format>
	</formats>
	<includeBaseDirectory>true</includeBaseDirectory>
	<baseDirectory>${project.build.finalName}-bin</baseDirectory>

	<fileSets>
		<fileSet>
			<directory>${basedir}/src/main/resources/bin</directory>
			<includes>
				<include>**/*.sh</include>
			</includes>
			<outputDirectory>bin</outputDirectory>
		</fileSet>
		<fileSet>
			<directory>${basedir}/.././</directory>
			<includes>
				<include>DISCLAIMER</include>
			</includes>
			<outputDirectory>.</outputDirectory>
		</fileSet>

		<fileSet>
			<directory>${basedir}/release-docs</directory>
			<useDefaultExcludes>true</useDefaultExcludes>
			<includes>
				<include>**/*</include>
			</includes>
			<outputDirectory>.</outputDirectory>
		</fileSet>

	</fileSets>

	<dependencySets>
		<dependencySet>
			<outputDirectory>lib</outputDirectory>
			<useProjectArtifact>true</useProjectArtifact>
		</dependencySet>
	</dependencySets>
</assembly>