<?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>unix-bin</id>
  <formats>
    <format>tar.gz</format>
  </formats>
  <fileSets>

    <!-- Copy over everything that needs to get unix line endings -->
    <fileSet>
      <directory>src/main/release</directory>
      <outputDirectory>/</outputDirectory>
      <excludes>
        <!--<exclude>bin/**</exclude>-->
      </excludes>
      <lineEnding>unix</lineEnding>
    </fileSet>

    <!-- copy the examples -->
    <fileSet>
      <directory>../examples</directory>
      <outputDirectory>/examples</outputDirectory>
      <excludes>
        <!-- disable build and IDEA files -->
        <exclude>**/*.i*</exclude>
        <exclude>**/target/</exclude>
        <exclude>**/target/*</exclude>
        <exclude>**/*.ser</exclude>
        <exclude>**/*.log</exclude>
      </excludes>
      <lineEnding>unix</lineEnding>
    </fileSet>

    <!-- copy the manual docs -->
    <fileSet>
      <directory>${basedir}/../tooling/camel-manual/target/site/manual/</directory>
      <outputDirectory>/doc</outputDirectory>
      <includes>
        <include>*.pdf</include>
      </includes>
    </fileSet>

    <!-- copy the website docs
    <fileSet>
      <directory>${basedir}/target/website</directory>
      <outputDirectory>/doc/website</outputDirectory>
    </fileSet>
    -->

    <!-- Copy over jar files -->
    <fileSet>
      <directory>target</directory>
      <outputDirectory>/</outputDirectory>
      <includes>
        <include>${pom.artifactId}-${pom.version}.jar</include>
      </includes>
    </fileSet>

  </fileSets>

  <dependencySets>
    <dependencySet>
      <outputDirectory>/lib</outputDirectory>
      <unpack>false</unpack>
      <scope>runtime</scope>
      <includes>
        <include>org.apache.camel:camel-activemq</include>
        <include>org.apache.camel:camel-atom</include>
        <include>org.apache.camel:camel-bam</include>
        <include>org.apache.camel:camel-core</include>
        <include>org.apache.camel:camel-csv</include>
        <include>org.apache.camel:camel-cxf</include>
        <include>org.apache.camel:camel-ftp</include>
        <include>org.apache.camel:camel-http</include>
        <include>org.apache.camel:camel-ibatis</include>
        <include>org.apache.camel:camel-irc</include>
        <include>org.apache.camel:camel-jaxb</include>
        <include>org.apache.camel:camel-jdbc</include>
        <include>org.apache.camel:camel-jetty</include>
        <include>org.apache.camel:camel-jing</include>
        <include>org.apache.camel:camel-jms</include>
        <include>org.apache.camel:camel-josql</include>
        <include>org.apache.camel:camel-jpa</include>
        <include>org.apache.camel:camel-juel</include>
        <include>org.apache.camel:camel-mail</include>
        <include>org.apache.camel:camel-msv</include>
        <include>org.apache.camel:camel-ognl</include>
        <include>org.apache.camel:camel-quartz</include>
        <include>org.apache.camel:camel-rmi</include>
        <include>org.apache.camel:camel-mina</include>
        <include>org.apache.camel:camel-saxon</include>
        <include>org.apache.camel:camel-script</include>
        <include>org.apache.camel:camel-spring</include>
        <include>org.apache.camel:camel-stringtemplate</include>
        <include>org.apache.camel:camel-velocity</include>
        <include>org.apache.camel:camel-xmlbeans</include>
        <include>org.apache.camel:camel-xmpp</include>
        <include>org.apache.camel:camel-xstream</include>
        <include>commons-logging:commons-logging</include>
      </includes>
    </dependencySet>
    <dependencySet>
      <outputDirectory>/lib/optional</outputDirectory>
      <unpack>false</unpack>
      <scope>runtime</scope>
      <includes>
        <include>${pom.groupId}:apache-activemq</include>
        <include>commons-beanutils:commons-beanutils</include>
        <include>commons-collections:commons-collections</include>
        <include>commons-httpclient:commons-httpclient</include>
        <include>commons-dbcp:commons-dbcp</include>
        <include>commons-pool:commons-pool</include>
        <include>log4j:log4j</include>
        <include>org.apache.geronimo.specs:geronimo-j2ee-management_1.0_spec</include>
        <include>org.apache.geronimo.specs:geronimo-jms_1.1_spec</include>
        <include>org.apache.geronimo.specs:geronimo-j2ee-jacc_1.0_spec</include>
        <include>org.apache.geronimo.specs:geronimo-j2ee-connector_1.5_spec</include>
        <include>org.apache.xbean:xbean-spring</include>
        <include>org.springframework:spring</include>
      </includes>
    </dependencySet>
  </dependencySets>

</assembly>
