<!--
  ~ 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>
    <id>src</id>
    <includeBaseDirectory>true</includeBaseDirectory> 
    <baseDirectory>axis2-${version}</baseDirectory>
    <formats>
	<!--<format>tar.gz</format>  //uncomment,if tar.gz archive needed-->
        <format>zip</format>
    </formats>

    <fileSets>
        <fileSet>
            <directory>../..</directory>
            <outputDirectory></outputDirectory>
            <includes>
                <include>../../etc/**</include>
                <include>modules/**</include>
            </includes>

	    <excludes>
		<exclude>../../SameServiceAddingTest.java</exclude>
		<exclude>**/target/**</exclude>
		<exclude>../../modules/samples/eventing/**</exclude>
		<exclude>../../modules/samples/security/**</exclude>
		<exclude>xdocs/**</exclude>
		<!-- 
		<exclude>**/*class*/**</exclude> 
		Above prevents following class being copied.
		/modules/kernel/src/org/apache/axis2/classloader/MultiParentClassLoader.java
		-->
		<exclude>**/.svn/**</exclude>
		<exclude>**/bin/**</exclude>
		<exclude>**/*.log</exclude>
		<!--
		<exclude>**/.*</exclude>
		Above prevents ".classpath" and ".project" from being copied (see
		modules/tool/conf/codegen
		-->
		<exclude>**/.settings/**</exclude>
		<exclude>**/*.license</exclude>
		<exclude>**/*.iml</exclude>
	    </excludes>

        </fileSet>


        <fileSet>
            <directory>../../etc</directory>
            <outputDirectory>etc</outputDirectory>
            <includes>
                <include>*.*</include>
            </includes>
	    <excludes>
		<exclude>.svn/**</exclude>
	    </excludes>
        </fileSet>
        <fileSet>
            <directory>target/tmp-doc-distro/docs</directory>
            <outputDirectory></outputDirectory>
            <includes>
                <include>NOTICE.txt</include>
            </includes>
        </fileSet>

        <fileSet>
            <directory>target/tmp-doc-distro/docs</directory>
            <outputDirectory></outputDirectory>
            <includes>
                <include>LICENSE.txt</include>
            </includes>
        </fileSet>

        <fileSet>
            <directory>../..</directory>
            <outputDirectory></outputDirectory>
            <includes>
                <include>project.xml</include>
                <include>maven.xml</include>
                <include>pom.xml</include>
            </includes>
        </fileSet>
	<!-- copying tools section of xdocs. This is needed by eclipse plugins -->
        <fileSet>
            <directory>../../xdocs</directory>
            <outputDirectory>xdocs</outputDirectory>
            <includes>
                <include>tools/**</include>
            </includes>
        </fileSet>
	<!-- copying licenses -->
        <fileSet>
            <directory>../../legal</directory>
            <outputDirectory>legal</outputDirectory>
            <excludes>
                <exclude>.svn/**</exclude>
            </excludes>
        </fileSet>
    <!-- copying release docs -->
        <fileSet>
             <directory>../../release-docs</directory>
             <outputDirectory>release-docs</outputDirectory>
             <excludes>
                 <exclude>.svn/**</exclude>
             </excludes>
         </fileSet>    
        <fileSet>
            <directory>target/tmp-doc-distro/docs</directory>
            <outputDirectory></outputDirectory>
            <includes>
                <include>README-std-src.txt</include>
            </includes>
        </fileSet>
    </fileSets>
</assembly>
