<?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, IDEA and Eclipse files -->
        <exclude>**/*.i*</exclude>
        <exclude>**/eclipse-classes/**</exclude>
        <exclude>**/.project</exclude>
        <exclude>**/.classpath</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/manual</outputDirectory>
      <includes>
        <include>*.pdf</include>
        <include>*.html</include>
      </includes>
    </fileSet>

   <!-- copy the java docs -->
   <fileSet>
    <directory>${basedir}/target/javadoc/</directory>
      <outputDirectory>/doc/javadoc</outputDirectory>
      <includes>
        <include>**/**</include>
      </includes>
    </fileSet>
  </fileSets>

  <componentDescriptors>
    <componentDescriptor>src/main/descriptors/common-bin.xml</componentDescriptor>
  </componentDescriptors>

</assembly>
