<?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.
-->
<component>
    <fileSets>
        <!-- Cherry-pick files from the expanded Karaf distribution -->
        <fileSet>
            <directory>target/dependencies/unix/apache-karaf-${karaf.version}</directory>
            <outputDirectory>/</outputDirectory>
            <excludes>
              <exclude>**/demos/**</exclude>
              <exclude>bin/**</exclude>
              <exclude>etc/system.properties</exclude>
              <exclude>etc/org.apache.karaf.features.cfg</exclude>
              <exclude>etc/org.apache.karaf.features.obr.cfg</exclude>
              <exclude>etc/org.ops4j.pax.logging.cfg</exclude>
              <exclude>etc/users.properties</exclude>
              <exclude>etc/custom.properties</exclude>
              <exclude>etc/jre.properties</exclude>
              <exclude>system/**</exclude>
              <exclude>LICENSE</exclude>
              <exclude>NOTICE</exclude>
              <exclude>README</exclude>
              <exclude>RELEASE-NOTES</exclude>
              <exclude>karaf-manual*</exclude>
            </excludes>
        </fileSet>

        <!-- Copy over bin/* scripts separately to get the correct file mode -->
        <fileSet>
            <directory>target/dependencies/unix/apache-karaf-${karaf.version}</directory>
            <outputDirectory>/</outputDirectory>
            <includes>
              <include>bin/*</include>
            </includes>
            <fileMode>0755</fileMode>
        </fileSet>

        <!-- Copy license and other files from root -->
        <fileSet>
            <directory>${basedir}/../..</directory>
            <outputDirectory>/</outputDirectory>
            <includes>
                <include>README</include>
                <include>RELEASE*</include>
            </includes>
            <lineEnding>unix</lineEnding>
            <fileMode>0644</fileMode>
        </fileSet>

        <!-- Copy over everything that needs to get unix line endings -->
        <fileSet>
            <directory>target/shared/etc</directory>
            <outputDirectory>/etc/</outputDirectory>
            <lineEnding>unix</lineEnding>
            <fileMode>0644</fileMode>
            <excludes>
              <exclude>org.apache.servicemix.nmr.cfg</exclude>
              <exclude>org.apache.servicemix.jbi.cfg</exclude>
              <exclude>org.apache.felix.fileinstall-activemq.cfg</exclude>
              <exclude>activemq-broker.xml</exclude>
            </excludes>
        </fileSet>

        <fileSet>
            <directory>target/shared/licenses</directory>
            <outputDirectory>/licenses/</outputDirectory>
            <lineEnding>unix</lineEnding>
            <fileMode>0644</fileMode>
        </fileSet>

        <!-- Copy over filtered resources -->
        <fileSet>
            <directory>target/classes/etc</directory>
            <outputDirectory>/etc/</outputDirectory>
            <includes>
                <include>*.*</include>
            </includes>
            <excludes>
              <exclude>org.apache.servicemix.nmr.cfg</exclude>
              <exclude>org.apache.servicemix.jbi.cfg</exclude>
              <exclude>activemq-broker.xml</exclude>
              <exclude>org.apache.felix.fileinstall-activemq.cfg</exclude>
            </excludes>
            <lineEnding>unix</lineEnding>
            <fileMode>0644</fileMode>
        </fileSet>
    </fileSets>

    <files>
        <file>
            <source>${basedir}/target/dependencies/unix/apache-karaf-${karaf.version}/bin/karaf</source>
            <outputDirectory>/bin/</outputDirectory>
            <destName>servicemix</destName>
            <fileMode>0755</fileMode>
            <lineEnding>unix</lineEnding>
        </file>
        <file>
            <source>${basedir}/target/maven-shared-archive-resources/META-INF/LICENSE</source>
            <outputDirectory>/</outputDirectory>
            <destName>LICENSE</destName>
            <fileMode>0644</fileMode>
            <lineEnding>unix</lineEnding>
        </file>
        <file>
            <source>${basedir}/target/maven-shared-archive-resources/META-INF/NOTICE</source>
            <outputDirectory>/</outputDirectory>
            <destName>NOTICE</destName>
            <fileMode>0644</fileMode>
            <lineEnding>unix</lineEnding>
        </file>
    </files>

</component>
