<?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>
        <!-- exclude README.txt which need get filtered -->
        <exclude>**/camel-example-reportincident-wssecurity/README.txt</exclude>
        <exclude>**/camel-example-osgi/README.txt</exclude>
        <exclude>**/camel-example-cxf-osgi/README.txt</exclude>
        <exclude>**/camel-example-cxf-blueprint/README.txt</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>*.html</include>
      </includes>
    </fileSet>

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

  <files>
    <!--filtering README.txt-->
    <file>
      <source>../examples/camel-example-reportincident-wssecurity/README.txt</source>
      <outputDirectory>/examples/camel-example-reportincident-wssecurity</outputDirectory>
      <filtered>true</filtered>
      <fileMode>0644</fileMode>
      <lineEnding>unix</lineEnding>
    </file>
    <file>
      <source>../examples/camel-example-osgi/README.txt</source>
      <outputDirectory>/examples/camel-example-osgi</outputDirectory>
      <filtered>true</filtered>
      <fileMode>0644</fileMode>
      <lineEnding>unix</lineEnding>
    </file>
    <file>
      <source>../examples/camel-example-cxf-osgi/README.txt</source>
      <outputDirectory>/examples/camel-example-cxf-osgi</outputDirectory>
      <filtered>true</filtered>
      <fileMode>0644</fileMode>
      <lineEnding>unix</lineEnding>
    </file>
    <file>
      <source>../examples/camel-example-cxf-blueprint/README.txt</source>
      <outputDirectory>/examples/camel-example-cxf-blueprint</outputDirectory>
      <filtered>true</filtered>
      <fileMode>0644</fileMode>
      <lineEnding>unix</lineEnding>
    </file>
  </files>


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

</assembly>
