<?xml version="1.0" encoding="UTF-8"?>

<!--

    This is the assembly descriptor for building a full source code
    distribution of ANTLR and all its related components. This assembly
    only includes the Java oriented source code, hence only the Java runtime
    is included in the resulting jar.

    The resulting jar is distribution that can be expanded with:

      jar xvf antlr-master-3.x.x-src.jar

    The output directory will be antlr-master-3.x.x and in here will be
    the BUILD.txt fie, which explains how to build ANTLR.

    Jim Idle - May, 2009
 -->
<assembly>

    <!-- The name of this assembly descriptor, which is referenced in
         the master pom.xml using <assemblyRef> (although in fact we
         reference the file name that contains it to avoid cluttering
         the pom.
      -->
    <id>src</id>

    <!-- We have elected to produce only a jar output and to use the line
         endings of whatever platform we are running on. More formats
         can be added for simultaneous production, such as <format>zip</format>
      -->
    <formats>
        <format>jar</format>
    </formats>

    <!--
        The resulting archives will have a base directory named after the master
        artifact, rather than just extract into the current directory.
      -->
    <includeBaseDirectory>true</includeBaseDirectory>

    <!-- We need to described the source code of each of the modules we want
         including in the archive. In the main this is because we did not store
         the modules in perforce using directory names that match the module
         names. This was for historic reasons as we already moved everything
         about massively, just to move to Maven in the first place.
      -->
    <moduleSets>

        <!-- Describe the gUnit source code.
          -->
        <moduleSet>

            <!-- The Maven artifact name tells the assembly artifact a bunch
                 of information to start with, such as its location in the current
                 tree and so on.
              -->
            <includes>
                <include>org.antlr:antlr-runtime</include>
            </includes>

            <!-- What sources do we wish to include from this module?
              -->
            <sources>

                <!-- Because the Java runtime source is not in a directory
                     called antlr-runtime, directly underneath the master
                     directory, we need to map the output directory so that
                     instead of starting with the name of the artifact, it
                     is in the place where the build expects it.
                  -->
                <outputDirectoryMapping>runtime/Java</outputDirectoryMapping>

                <fileSets>
                     <!-- We have one file set, being the src sub-directory, which in
                          the output archive, we also want to be called src/
                       -->
                    <fileSet>
                        <directory>src</directory>
                        <outputDirectory>src</outputDirectory>
                    </fileSet>

                    <!-- In the base runtime/Java directory, we need to include a number
                         of files that either document the module or control the
                         build. These are not underneath the src directory of course
                         so they need to be named here (which nicely documents what
                         is included.
                      -->
                    <fileSet>
                        <includes>
                            <include>pom.xml</include>
                            <include>doxyfile</include>
                            <include>antlr.config</include>
                        </includes>
                    </fileSet>
                </fileSets>
            </sources>

        </moduleSet>

        <!-- Describe the ANTLR tool source code.
          -->
        <moduleSet>
            <includes>
                <include>org.antlr:antlr</include>
            </includes>

            <!-- What sources do we wish to include from this module?
              -->
            <sources>

                <!-- Because the tool source code is not in a directory
                     called antlr, nor directly underneath the master
                     directory, we need to map the output directory so that
                     instead of starting with the name of the artifact, it
                     is in the place where the build expects it.
                  -->
                <outputDirectoryMapping>tool</outputDirectoryMapping>


                <fileSets>

                    <!-- We have one file set, being the src sub-directory, which in
                         the output archive, we also want to be called src/
                      -->
                    <fileSet>
                        <directory>src</directory>
                        <outputDirectory>src</outputDirectory>
                    </fileSet>

                    <!-- In the base tool directory, we need to include a number
                         of files that either document the module or control the
                         build. These are not underneath the src directory of course
                         so they need to be named here (which nicely documents what
                         is included.
                      -->
                    <fileSet>
                        <includes>
                            <include>pom.xml</include>
                            <include>CHANGES.txt</include>
                            <include>LICENSE.txt</include>
                            <include>README.txt</include>
                            <include>antlr.config</include>
                        </includes>
                    </fileSet>

                </fileSets>

            </sources>

        </moduleSet>

    </moduleSets>

    <!-- In the base directory of the master build directory (the root of all
         the other sources), there are a number of files that describe or control
         the build (such as the master pom.xml and the BUILD.txt files). Hence
         we need to describe them in their own fileset. No output mapping is required here
         of course.
      -->
    <fileSets>
        <fileSet>
            <includes>
                <include>pom.xml</include>
                <include>antlrjar.xml</include>
                <include>antlrsources.xml</include>
                <include>BUILD.txt</include>
            </includes>
        </fileSet>
    </fileSets>

</assembly>
