# 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.
#

.git
.vscode
.cache
.cproject
.settings
.DS_Store
.idea
.iml
.project
nifi-minifi-cpp.kdev4
.kdev4
.device_id
.ccls-cache
.vs
bt_state
bin/minifi
*build*
*flowfile_checkpoint
*_repository*
logs
**/cmake-build-*
docker/*
!docker/conf
target
*.pyc
*.swp
__pycache__/
docs/generated
corecomponentstate
flowfile_repository
content_repository
provenance_repository
logs
compile_commands.json

extensions/expression-language/Parser.cpp
extensions/expression-language/Parser.hpp
extensions/expression-language/Scanner.cpp
extensions/expression-language/location.hh
extensions/expression-language/position.hh
extensions/expression-language/stack.h
thirdparty/uuid/tst_uuid*
thirdparty/apache-rat/apache-rat*
thirdparty/**/*.o
thirdparty/**/*.a
libminifi/test/**/*.a
libminifi/src/agent/agent_version.cpp

**/assemblies
**/CMakeCache.txt
**/CMakeFiles
**/CMakeScripts
**/cmake_install.cmake
**/install_manifest.txt
**/CTestTestfile.cmake
