 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.

 Files having a separate license should be ignored.
 For Celix these include
   - Mongoose
   - Civetweb
   - Unzip and MiniZip files
   - Doxygen scripts for CMake (Doxyfile.in, UseDoxygen.cmake)
   - memstream
 
 Also there are several files which can't have a license.
   - *.in Input files used by CMake to generate files for deployment,
          should not contain comments.
  - .project Eclipse project file, not in the release but generated by CMake.
             Excluded to prevent false positives when using RAT on a dev tree.
   
 Todo: Why doesn't RAT exclude these files when using a full path?
cmake/config.properties.in
cmake/run.sh.in
cmake/RunConfig.in

Doxyfile.in

 Workaround to exclude .in files.
(.*).in

build/*

.project
   
md5.inl


MiniZip64_info.txt

unzip.c
unzip.h
miniunz.c
ioapi.c
ioapi.h
iowin32.c
iowin32.h

UseDoxygen.cmake
CodeCoverage.cmake

manifest_sections.txt
manifest.txt

fmemopen.c
fmemopen.h
open_memstream.c
open_memstream.h

README.md

.travis.yml

example1.descriptor
example2.descriptor
example3.descriptor
example4.descriptor
org.apache.celix.calc.api.Calculator2.descriptor
msg_example1.descriptor
msg_example2.descriptor
msg_example3.descriptor
