<?xml version="1.0" encoding="UTF-8"?>
<!--
 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>source</id>
    <formats>
        <format>zip</format>
    </formats>
    <!--
        rather than including the base directory (which would cause this
        archive to unpack into the same directory as the binary
        distribution), we specify the directory into which to put
        sources below, in the <outputDirectory> tags
    -->
    <includeBaseDirectory>false</includeBaseDirectory>
    <fileSets>
        <fileSet>
            <directory>..</directory>
            <outputDirectory>${project.artifactId}-${project.version}-source</outputDirectory>
            <excludes>
                <exclude>**/target/**</exclude>
                <exclude>**/*.log</exclude>
                <exclude>**/.*</exclude>
                <exclude>**/.*/**</exclude>
            </excludes>
        </fileSet>

        <!--
            Also put the standard license and notice files at the top
            of the zip. Even those these will be included in the
            openjpa-project sub-directory, the Apache rules say that
            it needs to be in the top-level of the artifact. See:

                http://www.apache.org/legal/src-headers.html#notice
        -->
        <fileSet>
            <outputDirectory>${project.artifactId}-${project.version}-source</outputDirectory>
            <includes>
                <include>README</include>
                <include>DISCLAIMER</include>
                <include>LICENSE</include>
                <include>STATUS</include>
                <include>NOTICE</include>
                <include>README.txt</include>
                <include>DISCLAIMER.txt</include>
                <include>LICENSE.txt</include>
                <include>STATUS.txt</include>
                <include>NOTICE.txt</include>
                <include>BUILDING</include>
                <include>BUILDING.txt</include>
                <include>RELEASE-NOTES</include>
                <include>RELEASE-NOTES.html</include>
                <include>RELEASE-NOTES.txt</include>
                <include>CHANGES</include>
                <include>CHANGES.txt</include>
            </includes>
        </fileSet>
    </fileSets>
</assembly>
