# 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
