<?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>${file.separator}examples</outputDirectory>
      <excludes>
        <!-- disable build, IDEA and Eclipse files -->
        <exclude>**/*.i??</exclude>
        <exclude>**/.idea/**</exclude>
        <exclude>**/eclipse-classes/**</exclude>
        <exclude>**/.project</exclude>
        <exclude>**/.classpath</exclude>
        <exclude>**/target/</exclude>
        <exclude>**/target/*</exclude>
        <exclude>**/*.ser</exclude>
        <exclude>**/*.log</exclude>
        <exclude>**/.flattened-pom.xml</exclude>
      </excludes>
      <lineEnding>unix</lineEnding>
    </fileSet>

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

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

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

</assembly>
