You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nifi.apache.org by lo...@apache.org on 2022/07/18 14:12:05 UTC

[nifi-minifi-cpp] branch main updated: MINIFICPP-1874 docker-verify should only run tests that are enabled

This is an automated email from the ASF dual-hosted git repository.

lordgamez pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/nifi-minifi-cpp.git


The following commit(s) were added to refs/heads/main by this push:
     new 699479ca6 MINIFICPP-1874 docker-verify should only run tests that are enabled
699479ca6 is described below

commit 699479ca6c5403097d6100ede5d83a51df4876a6
Author: Martin Zink <ma...@apache.org>
AuthorDate: Thu Jun 23 12:26:04 2022 +0200

    MINIFICPP-1874 docker-verify should only run tests that are enabled
    
    - removed options duplication in cmake
    
    Signed-off-by: Gabor Gyimesi <ga...@gmail.com>
    
    This closes #1369
---
 .github/workflows/ci.yml                           |   8 +-
 CMakeLists.txt                                     |  90 +-------
 cmake/DockerConfig.cmake                           | 247 ++-------------------
 cmake/MiNiFiOptions.cmake                          | 139 ++++++++++++
 docker/DockerBuild.sh                              | 142 ++++++------
 docker/DockerVerify.sh                             |   8 +-
 docker/Dockerfile                                  |  86 +------
 docker/bionic/Dockerfile                           |  58 +----
 docker/centos/Dockerfile                           |  59 +----
 docker/fedora/Dockerfile                           |  59 +----
 docker/focal/Dockerfile                            |  58 +----
 docker/test/integration/features/CMakeLists.txt    |  87 ++++++++
 .../integration/features/elasticsearch.feature     |   1 -
 .../test/integration/features/opensearch.feature   |   1 -
 extensions/sftp/tests/PutSFTPTests.cpp             |   3 +-
 15 files changed, 359 insertions(+), 687 deletions(-)

diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index bdc8073b9..21464bba6 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -36,7 +36,7 @@ jobs:
           export LDFLAGS="-L/usr/local/opt/flex/lib"
           export CPPFLAGS="-I/usr/local/opt/flex/include"
           # CPPFLAGS are not recognized by cmake, so we have to force them to CFLAGS and CXXFLAGS to have flex 2.6 working
-          ./bootstrap.sh -e -t && cd build  && cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_C_FLAGS="${CPPFLAGS} ${CFLAGS}" -DCMAKE_CXX_FLAGS="${CPPFLAGS} ${CXXFLAGS}" -DENABLE_SCRIPTING=ON -DENABLE_LUA_SCRIPTING=ON -DENABLE_SQL=ON -DUSE_REAL_ODBC_TEST_DRIVER=ON -DENABLE_AZURE=ON -DENABLE_GCP=ON -DCMAKE_VERBOSE_MAKEFILE=ON -DCMAKE_RULE_MESSAGES=OFF -DSTRICT_GSL_CHECKS=AUDIT -DFAIL_ON_WARNINGS=ON .. && cmake --build . --parallel 4
+          ./bootstrap.sh -e -t && cd build  && cmake -DCMAKE_BUILD_TYPE=Release -DCI_BUILD=ON -DCMAKE_C_FLAGS="${CPPFLAGS} ${CFLAGS}" -DCMAKE_CXX_FLAGS="${CPPFLAGS} ${CXXFLAGS}" -DENABLE_SCRIPTING=ON -DENABLE_LUA_SCRIPTING=ON -DENABLE_SQL=ON -DUSE_REAL_ODBC_TEST_DRIVER=ON -DENABLE_AZURE=ON -DENABLE_GCP=ON -DCMAKE_VERBOSE_MAKEFILE=ON -DCMAKE_RULE_MESSAGES=OFF -DSTRICT_GSL_CHECKS=AUDIT -DFAIL_ON_WARNINGS=ON .. && cmake --build . --parallel 4
       - name: test
         run: cd build && make test ARGS="--timeout 300 -j4 --output-on-failure"
       - name: linter
@@ -116,7 +116,7 @@ jobs:
           cd build
           export CC=gcc-11
           export CXX=g++-11
-          cmake -DUSE_SHARED_LIBS=ON -DCMAKE_BUILD_TYPE=Release -DSTRICT_GSL_CHECKS=AUDIT -DFAIL_ON_WARNINGS=ON -DENABLE_AWS=ON -DENABLE_AZURE=ON -DENABLE_BUSTACHE=ON -DENABLE_COAP=ON \
+          cmake -DUSE_SHARED_LIBS=ON -DCMAKE_BUILD_TYPE=Release -DCI_BUILD=ON -DSTRICT_GSL_CHECKS=AUDIT -DFAIL_ON_WARNINGS=ON -DENABLE_AWS=ON -DENABLE_AZURE=ON -DENABLE_BUSTACHE=ON -DENABLE_COAP=ON \
               -DENABLE_ENCRYPT_CONFIG=ON -DENABLE_GPS=ON -DENABLE_JNI=ON -DENABLE_LIBRDKAFKA=ON -DENABLE_LINTER=ON -DENABLE_MQTT=ON -DENABLE_NANOFI=ON -DENABLE_OPC=ON -DENABLE_OPENCV=ON \
               -DENABLE_OPENWSMAN=ON -DENABLE_OPS=ON -DENABLE_PCAP=ON -DENABLE_PYTHON=ON -DENABLE_SENSORS=ON -DENABLE_SFTP=ON -DENABLE_SQL=ON -DENABLE_SYSTEMD=ON -DENABLE_TENSORFLOW=OFF \
               -DENABLE_USB_CAMERA=ON -DENABLE_SCRIPTING=ON -DENABLE_LUA_SCRIPTING=ON -DENABLE_KUBERNETES=ON -DENABLE_GCP=ON -DENABLE_PROCFS=ON -DENABLE_PROMETHEUS=ON -DENABLE_ELASTICSEARCH=ON ..
@@ -163,7 +163,7 @@ jobs:
           export CXX=clang++-14
           export CXXFLAGS="${CXXFLAGS} -stdlib=libc++"
           export LDFLAGS="${LDFLAGS} -stdlib=libc++"
-          cmake -DUSE_SHARED_LIBS=ON -DCMAKE_BUILD_TYPE=Release -DSTRICT_GSL_CHECKS=AUDIT -DFAIL_ON_WARNINGS=ON -DENABLE_AWS=ON -DENABLE_AZURE=ON -DENABLE_BUSTACHE=ON -DENABLE_COAP=ON \
+          cmake -DUSE_SHARED_LIBS=ON -DCMAKE_BUILD_TYPE=Release -DCI_BUILD=ON -DSTRICT_GSL_CHECKS=AUDIT -DFAIL_ON_WARNINGS=ON -DENABLE_AWS=ON -DENABLE_AZURE=ON -DENABLE_BUSTACHE=ON -DENABLE_COAP=ON \
               -DENABLE_ENCRYPT_CONFIG=ON -DENABLE_GPS=ON -DENABLE_JNI=ON -DENABLE_LIBRDKAFKA=ON -DENABLE_LINTER=ON -DENABLE_MQTT=ON -DENABLE_NANOFI=ON -DENABLE_OPC=ON -DENABLE_OPENCV=ON \
               -DENABLE_OPENWSMAN=ON -DENABLE_OPS=ON -DENABLE_PCAP=ON -DENABLE_PYTHON=ON -DENABLE_SENSORS=ON -DENABLE_SFTP=ON -DENABLE_SQL=ON -DENABLE_SYSTEMD=ON -DENABLE_TENSORFLOW=OFF \
               -DENABLE_USB_CAMERA=ON -DENABLE_SCRIPTING=ON -DENABLE_LUA_SCRIPTING=ON -DENABLE_KUBERNETES=ON -DENABLE_GCP=ON -DENABLE_PROCFS=ON -DENABLE_PROMETHEUS=ON -DENABLE_ELASTICSEARCH=ON \
@@ -222,7 +222,7 @@ jobs:
           if [ -d ~/.ccache ]; then mv ~/.ccache .; fi
           mkdir build
           cd build
-          cmake -DUSE_SHARED_LIBS= -DSTRICT_GSL_CHECKS=AUDIT -DENABLE_JNI=OFF -DDISABLE_JEMALLOC=ON -DENABLE_AWS=ON -DENABLE_LIBRDKAFKA=ON -DENABLE_MQTT=ON -DENABLE_AZURE=ON -DENABLE_SQL=ON -DENABLE_SPLUNK=ON -DENABLE_GCP=ON -DENABLE_OPC=ON -DENABLE_SCRIPTING=ON -DENABLE_LUA_SCRIPTING=ON -DENABLE_KUBERNETES=ON -DENABLE_TEST_PROCESSORS=ON -DENABLE_PROMETHEUS=ON -DDOCKER_BUILD_ONLY=ON -DDOCKER_CCACHE_DUMP_LOCATION=$HOME/.ccache ..
+          cmake -DUSE_SHARED_LIBS= -DSTRICT_GSL_CHECKS=AUDIT -DCI_BUILD=ON -DENABLE_JNI=OFF -DDISABLE_JEMALLOC=ON -DENABLE_AWS=ON -DENABLE_LIBRDKAFKA=ON -DENABLE_MQTT=ON -DENABLE_AZURE=ON -DENABLE_SQL=ON -DENABLE_SPLUNK=ON -DENABLE_GCP=ON -DENABLE_OPC=ON -DENABLE_SCRIPTING=ON -DENABLE_LUA_SCRIPTING=ON -DENABLE_KUBERNETES=ON -DENABLE_TEST_PROCESSORS=ON -DENABLE_PROMETHEUS=ON -DDOCKER_BUILD_ONLY=ON -DDOCKER_CCACHE_DUMP_LOCATION=$HOME/.ccache ..
           make docker
       - id: install_deps
         run: |
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 3457f5f34..327060891 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -39,95 +39,7 @@ include(ExternalProject)
 list(APPEND CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake")
 include(WholeArchive)
 
-option(ENABLE_LINTER "Create linter components" ON)
-option(SKIP_TESTS "Skips building all tests." OFF)
-option(PORTABLE "Instructs the compiler to remove architecture specific optimizations" ON)
-option(USE_SHARED_LIBS "Builds using shared libraries" ON)
-option(ENABLE_PYTHON "Instructs the build system to enable building shared objects for the python lib" OFF)
-cmake_dependent_option(STATIC_BUILD "Attempts to statically link as many dependencies as possible." ON "NOT ENABLE_PYTHON; NOT USE_SHARED_LIBS" OFF)
-option(LIBC_STATIC "Instructs the build system to statically link libstdc++ and glibc into minifiexe. Experiemental" OFF)
-option(OPENSSL_OFF "Disables OpenSSL" OFF)
-option(ENABLE_OPS "Enable Operations/zlib Tools" ON)
-option(ENABLE_JNI "Instructs the build system to enable the JNI extension" OFF)
-option(ENABLE_OPENCV "Instructs the build system to enable the OpenCV extension" OFF)
-option(ENABLE_OPC "Instructs the build system to enable the OPC extension" OFF)
-option(ENABLE_NANOFI "Instructs the build system to enable nanofi library" OFF)
-option(BUILD_SHARED_LIBS "Build yaml cpp shared lib" OFF)
-
-option(BUILD_ROCKSDB "Instructs the build system to use RocksDB from the third party directory" ON)
-option(FORCE_WINDOWS "Instructs the build system to force Windows builds when WIN32 is specified" OFF)
-option(DISABLE_CURL "Disables libCurl Properties." OFF)
-
-option(USE_GOLD_LINKER "Use Gold Linker" OFF)
-option(INSTALLER_MERGE_MODULES "Creates installer with merge modules" OFF)
-option(FAIL_ON_WARNINGS "Treat warnings as errors" OFF)
-option(USE_REAL_ODBC_TEST_DRIVER "Use SQLite ODBC driver in SQL extenstion unit tests instead of a mock database" OFF)
-# This is needed for ninja:
-# By default, neither Clang or GCC will add ANSI-formatted colors to your output if they detect
-# the output medium is not a terminal. This means no coloring when using a generator
-# different than "GNU Makefiles".
-option (FORCE_COLORED_OUTPUT "Always produce ANSI-colored output (GNU/Clang only)." FALSE)
-option(AWS_ENABLE_UNITY_BUILD "If enabled, AWS SDK libraries will be built as a single, generated .cpp file. \
-	This can significantly reduce static library size as well as speed up a single compilation time, but it is regenerated \
-	and recompiled in every iterative build instance. Turn off to avoid recompilation." ON)
-
-cmake_dependent_option(ASAN_BUILD "Uses AddressSanitizer to instrument the code" OFF "NOT WIN32" OFF)
-
-# Option: STRICT_GSL_CHECKS
-# AUDIT: Enable all checks, including gsl_ExpectsAudit() and gsl_EnsuresAudit()
-# ON: Enable all checks, excluding gsl_ExpectsAudit() and gsl_EnsuresAudit() (GSL default)
-# DEBUG_ONLY: Like ON in the Debug configuration, OFF in others (MiNiFi C++ default)
-# OFF: Throw on contract checking and assertion failures instead of calling std::terminate()
-set(STRICT_GSL_CHECKS "DEBUG_ONLY" CACHE STRING "Contract checking and assertion failures call terminate")
-list(APPEND STRICT_GSL_CHECKS_Values AUDIT ON DEBUG_ONLY OFF)
-set_property(CACHE STRICT_GSL_CHECKS PROPERTY STRINGS ${STRICT_GSL_CHECKS_Values})
-
-if (WIN32)
-	option(MSI_REDISTRIBUTE_UCRT_NONASL "Redistribute Universal C Runtime DLLs with the MSI generated by CPack. The resulting MSI is not distributable under Apache 2.0." OFF)
-	option(ENABLE_WEL "Enables the suite of Windows Event Log extensions." OFF)
-	option(ENABLE_PDH "Enables PDH support." OFF)
-endif()
-
-if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
-	option(ENABLE_SYSTEMD "Enables the systemd extension." ON)
-endif()
-
-option(DISABLE_EXPRESSION_LANGUAGE "Disables the scripting extensions." OFF)
-option(DISABLE_CIVET "Disables CivetWeb components." OFF)
-option(DISABLE_ROCKSDB "Disables the RocksDB extension." OFF)
-option(DISABLE_LIBARCHIVE "Disables the lib archive extensions." OFF)
-option(DISABLE_LZMA "Disables the liblzma build" OFF)
-option(DISABLE_BZIP2 "Disables the bzip2 build" OFF)
-option(ENABLE_GPS "Enables the GPS extension." OFF)
-option(ENABLE_COAP "Enables the CoAP extension." OFF)
-option(ENABLE_SQL "Enables the SQL Suite of Tools." ON)
-option(ENABLE_MQTT "Enables the mqtt extension." OFF)
-option(ENABLE_PCAP "Enables the PCAP extension." OFF)
-option(ENABLE_LIBRDKAFKA "Enables the librdkafka extension." ON)
-option(ENABLE_SCRIPTING "Enables the scripting extensions." OFF)
-option(ENABLE_SENSORS "Enables the Sensors package." OFF)
-option(ENABLE_USB_CAMERA "Enables USB camera support." OFF)
-option(ENABLE_TENSORFLOW "Enables the TensorFlow extensions." OFF)  ## Disabled by default because TF can be complex/environment-specific to build
-option(ENABLE_AWS "Enables AWS support." ON)
-option(ENABLE_OPENCV "Enables the OpenCV extensions." OFF)
-option(ENABLE_BUSTACHE "Enables Bustache (ApplyTemplate) support." OFF)
-option(ENABLE_SFTP "Enables SFTP support." OFF)
-option(ENABLE_OPENWSMAN "Enables the Openwsman extensions." OFF)
-option(ENABLE_AZURE "Enables Azure support." ON)
-option(ENABLE_ENCRYPT_CONFIG "Enables build of encrypt-config binary." ON)
-option(ENABLE_SPLUNK "Enable Splunk support" ON)
-option(ENABLE_ELASTICSEARCH "Enable Elasticsearch support" OFF)
-option(ENABLE_GCP "Enable Google Cloud support" ON)
-option(DOCKER_BUILD_ONLY "Disables all targets except docker build scripts. Ideal for systems without an up-to-date compiler." OFF)
-option(ENABLE_KUBERNETES "Enables the Kubernetes extensions." OFF)
-option(ENABLE_TEST_PROCESSORS "Enables test processors" OFF)
-option(ENABLE_PROMETHEUS "Enables Prometheus support." OFF)
-
-if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
-	option(ENABLE_PROCFS "Enables the procfs extension." ON)
-endif()
-
-## Keep all option definitions above this line
+include(MiNiFiOptions)
 
 include(DockerConfig)
 if (DOCKER_BUILD_ONLY)
diff --git a/cmake/DockerConfig.cmake b/cmake/DockerConfig.cmake
index 7532ec56a..b6c21d85c 100644
--- a/cmake/DockerConfig.cmake
+++ b/cmake/DockerConfig.cmake
@@ -22,48 +22,7 @@ add_custom_target(
         -u 1000
         -g 1000
         -v ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH}
-        -c ENABLE_ALL=${ENABLE_ALL}
-        -c ENABLE_PYTHON=${ENABLE_PYTHON}
-        -c ENABLE_OPS=${ENABLE_OPS}
-        -c ENABLE_JNI=${ENABLE_JNI}
-        -c ENABLE_OPENCV=${ENABLE_OPENCV}
-        -c ENABLE_OPC=${ENABLE_OPC}
-        -c ENABLE_GPS=${ENABLE_GPS}
-        -c ENABLE_COAP=${ENABLE_COAP}
-        -c ENABLE_SQL=${ENABLE_SQL}
-        -c ENABLE_MQTT=${ENABLE_MQTT}
-        -c ENABLE_PCAP=${ENABLE_PCAP}
-        -c ENABLE_LIBRDKAFKA=${ENABLE_LIBRDKAFKA}
-        -c ENABLE_SENSORS=${ENABLE_SENSORS}
-        -c ENABLE_USB_CAMERA=${ENABLE_USB_CAMERA}
-        -c ENABLE_TENSORFLOW=${ENABLE_TENSORFLOW}
-        -c ENABLE_AWS=${ENABLE_AWS}
-        -c ENABLE_BUSTACHE=${ENABLE_BUSTACHE}
-        -c ENABLE_SFTP=${ENABLE_SFTP}
-        -c ENABLE_OPENWSMAN=${ENABLE_OPENWSMAN}
-        -c ENABLE_AZURE=${ENABLE_AZURE}
-        -c ENABLE_ENCRYPT_CONFIG=${ENABLE_ENCRYPT_CONFIG}
-        -c ENABLE_NANOFI=${ENABLE_NANOFI}
-        -c ENABLE_SPLUNK=${ENABLE_SPLUNK}
-        -c ENABLE_GCP=${ENABLE_GCP}
-        -c ENABLE_ELASTICSEARCH=${ENABLE_ELASTICSEARCH}
-        -c ENABLE_SCRIPTING=${ENABLE_SCRIPTING}
-        -c ENABLE_LUA_SCRIPTING=${ENABLE_LUA_SCRIPTING}
-        -c ENABLE_KUBERNETES=${ENABLE_KUBERNETES}
-        -c ENABLE_PROCFS=${ENABLE_PROCFS}
-        -c ENABLE_TEST_PROCESSORS=${ENABLE_TEST_PROCESSORS}
-        -c ENABLE_PROMETHEUS=${ENABLE_PROMETHEUS}
-        -c DISABLE_CURL=${DISABLE_CURL}
-        -c DISABLE_JEMALLOC=${DISABLE_JEMALLOC}
-        -c DISABLE_CIVET=${DISABLE_CIVET}
-        -c DISABLE_EXPRESSION_LANGUAGE=${DISABLE_EXPRESSION_LANGUAGE}
-        -c DISABLE_ROCKSDB=${DISABLE_ROCKSDB}
-        -c DISABLE_LIBARCHIVE=${DISABLE_LIBARCHIVE}
-        -c DISABLE_LZMA=${DISABLE_LZMA}
-        -c DISABLE_BZIP2=${DISABLE_BZIP2}
-        -c DISABLE_SCRIPTING=${DISABLE_SCRIPTING}
-        -c DISABLE_PYTHON_SCRIPTING=${DISABLE_PYTHON_SCRIPTING}
-        -c DISABLE_CONTROLLER=${DISABLE_CONTROLLER}
+        -o ${MINIFI_DOCKER_OPTIONS_STR}
         -c DOCKER_BASE_IMAGE=${DOCKER_BASE_IMAGE}
         -c DOCKER_CCACHE_DUMP_LOCATION=${DOCKER_CCACHE_DUMP_LOCATION}
         -c BUILD_NUMBER=${BUILD_NUMBER}
@@ -77,15 +36,14 @@ add_custom_target(
         -g 1000
         -t minimal
         -v ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH}
-        -c ENABLE_PYTHON=OFF
-        -c ENABLE_LIBRDKAFKA=ON
-        -c ENABLE_AWS=ON
-        -c ENABLE_AZURE=ON
-        -c DISABLE_CONTROLLER=ON
-        -c ENABLE_SCRIPTING=OFF
-        -c DISABLE_PYTHON_SCRIPTING=ON
-        -c ENABLE_ENCRYPT_CONFIG=OFF
-        -c AWS_ENABLE_UNITY_BUILD=OFF
+        -o \"-DENABLE_PYTHON=OFF
+             -DENABLE_LIBRDKAFKA=ON
+             -DENABLE_AWS=ON
+             -DENABLE_AZURE=ON
+             -DDISABLE_CONTROLLER=ON
+             -DENABLE_SCRIPTING=OFF
+             -DDISABLE_PYTHON_SCRIPTING=ON
+             -DENABLE_ENCRYPT_CONFIG=OFF \"
         -c DOCKER_BASE_IMAGE=${DOCKER_BASE_IMAGE}
         -c BUILD_NUMBER=${BUILD_NUMBER}
     WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/docker/)
@@ -96,48 +54,7 @@ add_custom_target(
         -u 1000
         -g 1000
         -v ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH}
-        -c ENABLE_ALL=${ENABLE_ALL}
-        -c ENABLE_PYTHON=${ENABLE_PYTHON}
-        -c ENABLE_OPS=${ENABLE_OPS}
-        -c ENABLE_JNI=${ENABLE_JNI}
-        -c ENABLE_OPENCV=${ENABLE_OPENCV}
-        -c ENABLE_OPC=${ENABLE_OPC}
-        -c ENABLE_GPS=${ENABLE_GPS}
-        -c ENABLE_COAP=${ENABLE_COAP}
-        -c ENABLE_SQL=${ENABLE_SQL}
-        -c ENABLE_MQTT=${ENABLE_MQTT}
-        -c ENABLE_PCAP=${ENABLE_PCAP}
-        -c ENABLE_LIBRDKAFKA=${ENABLE_LIBRDKAFKA}
-        -c ENABLE_SENSORS=${ENABLE_SENSORS}
-        -c ENABLE_USB_CAMERA=${ENABLE_USB_CAMERA}
-        -c ENABLE_TENSORFLOW=${ENABLE_TENSORFLOW}
-        -c ENABLE_AWS=${ENABLE_AWS}
-        -c ENABLE_BUSTACHE=${ENABLE_BUSTACHE}
-        -c ENABLE_SFTP=${ENABLE_SFTP}
-        -c ENABLE_OPENWSMAN=${ENABLE_OPENWSMAN}
-        -c ENABLE_AZURE=${ENABLE_AZURE}
-        -c ENABLE_ENCRYPT_CONFIG=${ENABLE_ENCRYPT_CONFIG}
-        -c ENABLE_NANOFI=${ENABLE_NANOFI}
-        -c ENABLE_SPLUNK=${ENABLE_SPLUNK}
-        -c ENABLE_GCP=${ENABLE_GCP}
-        -c ENABLE_ELASTICSEARCH=${ENABLE_ELASTICSEARCH}
-        -c ENABLE_SCRIPTING=${ENABLE_SCRIPTING}
-        -c ENABLE_LUA_SCRIPTING=${ENABLE_LUA_SCRIPTING}
-        -c ENABLE_KUBERNETES=${ENABLE_KUBERNETES}
-        -c ENABLE_PROCFS=${ENABLE_PROCFS}
-        -c ENABLE_PROMETHEUS=${ENABLE_PROMETHEUS}
-        -c ENABLE_SYSTEMD=${ENABLE_SYSTEMD}
-        -c DISABLE_CURL=${DISABLE_CURL}
-        -c DISABLE_JEMALLOC=${DISABLE_JEMALLOC}
-        -c DISABLE_CIVET=${DISABLE_CIVET}
-        -c DISABLE_EXPRESSION_LANGUAGE=${DISABLE_EXPRESSION_LANGUAGE}
-        -c DISABLE_ROCKSDB=${DISABLE_ROCKSDB}
-        -c DISABLE_LIBARCHIVE=${DISABLE_LIBARCHIVE}
-        -c DISABLE_LZMA=${DISABLE_LZMA}
-        -c DISABLE_BZIP2=${DISABLE_BZIP2}
-        -c DISABLE_SCRIPTING=${DISABLE_SCRIPTING}
-        -c DISABLE_PYTHON_SCRIPTING=${DISABLE_PYTHON_SCRIPTING}
-        -c DISABLE_CONTROLLER=${DISABLE_CONTROLLER}
+        -o ${MINIFI_DOCKER_OPTIONS_STR}
         -l ${CMAKE_BINARY_DIR}
         -d centos
         -c BUILD_NUMBER=${BUILD_NUMBER}
@@ -149,48 +66,7 @@ add_custom_target(
         -u 1000
         -g 1000
         -v ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH}
-        -c ENABLE_ALL=${ENABLE_ALL}
-        -c ENABLE_PYTHON=${ENABLE_PYTHON}
-        -c ENABLE_OPS=${ENABLE_OPS}
-        -c ENABLE_JNI=${ENABLE_JNI}
-        -c ENABLE_OPENCV=${ENABLE_OPENCV}
-        -c ENABLE_OPC=${ENABLE_OPC}
-        -c ENABLE_GPS=${ENABLE_GPS}
-        -c ENABLE_COAP=${ENABLE_COAP}
-        -c ENABLE_SQL=${ENABLE_SQL}
-        -c ENABLE_MQTT=${ENABLE_MQTT}
-        -c ENABLE_PCAP=${ENABLE_PCAP}
-        -c ENABLE_LIBRDKAFKA=${ENABLE_LIBRDKAFKA}
-        -c ENABLE_SENSORS=${ENABLE_SENSORS}
-        -c ENABLE_USB_CAMERA=${ENABLE_USB_CAMERA}
-        -c ENABLE_TENSORFLOW=${ENABLE_TENSORFLOW}
-        -c ENABLE_AWS=${ENABLE_AWS}
-        -c ENABLE_BUSTACHE=${ENABLE_BUSTACHE}
-        -c ENABLE_SFTP=${ENABLE_SFTP}
-        -c ENABLE_OPENWSMAN=${ENABLE_OPENWSMAN}
-        -c ENABLE_AZURE=${ENABLE_AZURE}
-        -c ENABLE_ENCRYPT_CONFIG=${ENABLE_ENCRYPT_CONFIG}
-        -c ENABLE_NANOFI=${ENABLE_NANOFI}
-        -c ENABLE_SPLUNK=${ENABLE_SPLUNK}
-        -c ENABLE_GCP=${ENABLE_GCP}
-        -c ENABLE_ELASTICSEARCH=${ENABLE_ELASTICSEARCH}
-        -c ENABLE_SCRIPTING=${ENABLE_SCRIPTING}
-        -c ENABLE_LUA_SCRIPTING=${ENABLE_LUA_SCRIPTING}
-        -c ENABLE_KUBERNETES=${ENABLE_KUBERNETES}
-        -c ENABLE_PROCFS=${ENABLE_PROCFS}
-        -c ENABLE_PROMETHEUS=${ENABLE_PROMETHEUS}
-        -c ENABLE_SYSTEMD=${ENABLE_SYSTEMD}
-        -c DISABLE_CURL=${DISABLE_CURL}
-        -c DISABLE_JEMALLOC=${DISABLE_JEMALLOC}
-        -c DISABLE_CIVET=${DISABLE_CIVET}
-        -c DISABLE_EXPRESSION_LANGUAGE=${DISABLE_EXPRESSION_LANGUAGE}
-        -c DISABLE_ROCKSDB=${DISABLE_ROCKSDB}
-        -c DISABLE_LIBARCHIVE=${DISABLE_LIBARCHIVE}
-        -c DISABLE_LZMA=${DISABLE_LZMA}
-        -c DISABLE_BZIP2=${DISABLE_BZIP2}
-        -c DISABLE_SCRIPTING=${DISABLE_SCRIPTING}
-        -c DISABLE_PYTHON_SCRIPTING=${DISABLE_PYTHON_SCRIPTING}
-        -c DISABLE_CONTROLLER=${DISABLE_CONTROLLER}
+        -o ${MINIFI_DOCKER_OPTIONS_STR}
         -l ${CMAKE_BINARY_DIR}
         -d fedora
         -c BUILD_NUMBER=${BUILD_NUMBER}
@@ -202,48 +78,7 @@ add_custom_target(
         -u 1000
         -g 1000
         -v ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH}
-        -c ENABLE_ALL=${ENABLE_ALL}
-        -c ENABLE_PYTHON=${ENABLE_PYTHON}
-        -c ENABLE_OPS=${ENABLE_OPS}
-        -c ENABLE_JNI=${ENABLE_JNI}
-        -c ENABLE_OPENCV=${ENABLE_OPENCV}
-        -c ENABLE_OPC=${ENABLE_OPC}
-        -c ENABLE_GPS=${ENABLE_GPS}
-        -c ENABLE_COAP=${ENABLE_COAP}
-        -c ENABLE_SQL=${ENABLE_SQL}
-        -c ENABLE_MQTT=${ENABLE_MQTT}
-        -c ENABLE_PCAP=${ENABLE_PCAP}
-        -c ENABLE_LIBRDKAFKA=${ENABLE_LIBRDKAFKA}
-        -c ENABLE_SENSORS=${ENABLE_SENSORS}
-        -c ENABLE_USB_CAMERA=${ENABLE_USB_CAMERA}
-        -c ENABLE_TENSORFLOW=${ENABLE_TENSORFLOW}
-        -c ENABLE_AWS=${ENABLE_AWS}
-        -c ENABLE_BUSTACHE=${ENABLE_BUSTACHE}
-        -c ENABLE_SFTP=${ENABLE_SFTP}
-        -c ENABLE_OPENWSMAN=${ENABLE_OPENWSMAN}
-        -c ENABLE_AZURE=${ENABLE_AZURE}
-        -c ENABLE_ENCRYPT_CONFIG=${ENABLE_ENCRYPT_CONFIG}
-        -c ENABLE_NANOFI=${ENABLE_NANOFI}
-        -c ENABLE_SPLUNK=${ENABLE_SPLUNK}
-        -c ENABLE_GCP=${ENABLE_GCP}
-        -c ENABLE_ELASTICSEARCH=${ENABLE_ELASTICSEARCH}
-        -c ENABLE_SCRIPTING=${ENABLE_SCRIPTING}
-        -c ENABLE_LUA_SCRIPTING=${ENABLE_LUA_SCRIPTING}
-        -c ENABLE_KUBERNETES=${ENABLE_KUBERNETES}
-        -c ENABLE_PROCFS=${ENABLE_PROCFS}
-        -c ENABLE_PROMETHEUS=${ENABLE_PROMETHEUS}
-        -c ENABLE_SYSTEMD=${ENABLE_SYSTEMD}
-        -c DISABLE_CURL=${DISABLE_CURL}
-        -c DISABLE_JEMALLOC=${DISABLE_JEMALLOC}
-        -c DISABLE_CIVET=${DISABLE_CIVET}
-        -c DISABLE_EXPRESSION_LANGUAGE=${DISABLE_EXPRESSION_LANGUAGE}
-        -c DISABLE_ROCKSDB=${DISABLE_ROCKSDB}
-        -c DISABLE_LIBARCHIVE=${DISABLE_LIBARCHIVE}
-        -c DISABLE_LZMA=${DISABLE_LZMA}
-        -c DISABLE_BZIP2=${DISABLE_BZIP2}
-        -c DISABLE_SCRIPTING=${DISABLE_SCRIPTING}
-        -c DISABLE_PYTHON_SCRIPTING=${DISABLE_PYTHON_SCRIPTING}
-        -c DISABLE_CONTROLLER=${DISABLE_CONTROLLER}
+        -o ${MINIFI_DOCKER_OPTIONS_STR}
         -l ${CMAKE_BINARY_DIR}
         -d bionic
         -c BUILD_NUMBER=${BUILD_NUMBER}
@@ -255,54 +90,20 @@ add_custom_target(
         -u 1000
         -g 1000
         -v ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH}
-        -c ENABLE_ALL=${ENABLE_ALL}
-        -c ENABLE_PYTHON=${ENABLE_PYTHON}
-        -c ENABLE_OPS=${ENABLE_OPS}
-        -c ENABLE_JNI=${ENABLE_JNI}
-        -c ENABLE_OPENCV=${ENABLE_OPENCV}
-        -c ENABLE_OPC=${ENABLE_OPC}
-        -c ENABLE_GPS=${ENABLE_GPS}
-        -c ENABLE_COAP=${ENABLE_COAP}
-        -c ENABLE_SQL=${ENABLE_SQL}
-        -c ENABLE_MQTT=${ENABLE_MQTT}
-        -c ENABLE_PCAP=${ENABLE_PCAP}
-        -c ENABLE_LIBRDKAFKA=${ENABLE_LIBRDKAFKA}
-        -c ENABLE_SENSORS=${ENABLE_SENSORS}
-        -c ENABLE_USB_CAMERA=${ENABLE_USB_CAMERA}
-        -c ENABLE_TENSORFLOW=${ENABLE_TENSORFLOW}
-        -c ENABLE_AWS=${ENABLE_AWS}
-        -c ENABLE_BUSTACHE=${ENABLE_BUSTACHE}
-        -c ENABLE_SFTP=${ENABLE_SFTP}
-        -c ENABLE_OPENWSMAN=${ENABLE_OPENWSMAN}
-        -c ENABLE_AZURE=${ENABLE_AZURE}
-        -c ENABLE_ENCRYPT_CONFIG=${ENABLE_ENCRYPT_CONFIG}
-        -c ENABLE_NANOFI=${ENABLE_NANOFI}
-        -c ENABLE_SPLUNK=${ENABLE_SPLUNK}
-        -c ENABLE_GCP=${ENABLE_GCP}
-        -c ENABLE_ELASTICSEARCH=${ENABLE_ELASTICSEARCH}
-        -c ENABLE_SCRIPTING=${ENABLE_SCRIPTING}
-        -c ENABLE_LUA_SCRIPTING=${ENABLE_LUA_SCRIPTING}
-        -c ENABLE_KUBERNETES=${ENABLE_KUBERNETES}
-        -c ENABLE_PROCFS=${ENABLE_PROCFS}
-        -c ENABLE_PROMETHEUS=${ENABLE_PROMETHEUS}
-        -c ENABLE_TEST_PROCESSORS=${ENABLE_TEST_PROCESSORS}
-        -c ENABLE_SYSTEMD=${ENABLE_SYSTEMD}
-        -c DISABLE_CURL=${DISABLE_CURL}
-        -c DISABLE_JEMALLOC=${DISABLE_JEMALLOC}
-        -c DISABLE_CIVET=${DISABLE_CIVET}
-        -c DISABLE_EXPRESSION_LANGUAGE=${DISABLE_EXPRESSION_LANGUAGE}
-        -c DISABLE_ROCKSDB=${DISABLE_ROCKSDB}
-        -c DISABLE_LIBARCHIVE=${DISABLE_LIBARCHIVE}
-        -c DISABLE_LZMA=${DISABLE_LZMA}
-        -c DISABLE_BZIP2=${DISABLE_BZIP2}
-        -c DISABLE_SCRIPTING=${DISABLE_SCRIPTING}
-        -c DISABLE_PYTHON_SCRIPTING=${DISABLE_PYTHON_SCRIPTING}
-        -c DISABLE_CONTROLLER=${DISABLE_CONTROLLER}
+        -o ${MINIFI_DOCKER_OPTIONS_STR}
         -l ${CMAKE_BINARY_DIR}
         -d focal
         -c BUILD_NUMBER=${BUILD_NUMBER}
     WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/docker/)
 
-add_custom_target(
-    docker-verify
-    COMMAND ${CMAKE_SOURCE_DIR}/docker/DockerVerify.sh ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH})
+if (EXISTS ${CMAKE_SOURCE_DIR}/docker/test/integration/features)
+    add_subdirectory(${CMAKE_SOURCE_DIR}/docker/test/integration/features)
+
+    add_custom_target(
+        docker-verify-all
+        COMMAND ${CMAKE_SOURCE_DIR}/docker/DockerVerify.sh ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH} ${ALL_BEHAVE_TESTS})
+
+    add_custom_target(
+        docker-verify
+        COMMAND ${CMAKE_SOURCE_DIR}/docker/DockerVerify.sh ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH} ${ENABLED_BEHAVE_TESTS})
+endif()
diff --git a/cmake/MiNiFiOptions.cmake b/cmake/MiNiFiOptions.cmake
new file mode 100644
index 000000000..b8905ae8e
--- /dev/null
+++ b/cmake/MiNiFiOptions.cmake
@@ -0,0 +1,139 @@
+# 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.
+
+set(MINIFI_OPTIONS "")
+function(add_minifi_option OPTION_NAME OPTION_DESCRIPTION OPTION_VALUE)
+    option(${OPTION_NAME} ${OPTION_DESCRIPTION} ${OPTION_VALUE})
+    list(APPEND MINIFI_OPTIONS ${OPTION_NAME})
+    set(MINIFI_OPTIONS ${MINIFI_OPTIONS} PARENT_SCOPE)
+endfunction()
+
+function(add_minifi_dependent_option OPTION_NAME OPTION_DESCRIPTION OPTION_VALUE DEPENDS FORCE)
+    cmake_dependent_option(${OPTION_NAME} ${OPTION_DESCRIPTION} ${OPTION_VALUE} ${DEPENDS} ${FORCE})
+    list(APPEND MINIFI_OPTIONS ${OPTION_NAME})
+    set(MINIFI_OPTIONS ${MINIFI_OPTIONS} PARENT_SCOPE)
+endfunction()
+
+add_minifi_option(CI_BUILD "Build is used for CI." OFF)
+add_minifi_option(ENABLE_LINTER "Create linter components" ON)
+add_minifi_option(SKIP_TESTS "Skips building all tests." OFF)
+add_minifi_option(DOCKER_BUILD_ONLY "Disables all targets except docker build scripts. Ideal for systems without an up-to-date compiler." OFF)
+
+add_minifi_option(PORTABLE "Instructs the compiler to remove architecture specific optimizations" ON)
+add_minifi_option(USE_SHARED_LIBS "Builds using shared libraries" ON)
+add_minifi_option(ENABLE_PYTHON "Instructs the build system to enable building shared objects for the python lib" OFF)
+add_minifi_dependent_option(STATIC_BUILD "Attempts to statically link as many dependencies as possible." ON "NOT ENABLE_PYTHON; NOT USE_SHARED_LIBS" OFF)
+add_minifi_option(LIBC_STATIC "Instructs the build system to statically link libstdc++ and glibc into minifiexe. Experiemental" OFF)
+add_minifi_option(OPENSSL_OFF "Disables OpenSSL" OFF)
+add_minifi_option(ENABLE_OPS "Enable Operations/zlib Tools" ON)
+add_minifi_option(ENABLE_JNI "Instructs the build system to enable the JNI extension" OFF)
+add_minifi_option(ENABLE_OPENCV "Instructs the build system to enable the OpenCV extension" OFF)
+add_minifi_option(ENABLE_OPC "Instructs the build system to enable the OPC extension" OFF)
+add_minifi_option(ENABLE_NANOFI "Instructs the build system to enable nanofi library" OFF)
+add_minifi_option(BUILD_SHARED_LIBS "Build yaml cpp shared lib" OFF)
+
+add_minifi_option(BUILD_ROCKSDB "Instructs the build system to use RocksDB from the third party directory" ON)
+add_minifi_option(FORCE_WINDOWS "Instructs the build system to force Windows builds when WIN32 is specified" OFF)
+add_minifi_option(DISABLE_CURL "Disables libCurl Properties." OFF)
+
+add_minifi_option(USE_GOLD_LINKER "Use Gold Linker" OFF)
+add_minifi_option(INSTALLER_MERGE_MODULES "Creates installer with merge modules" OFF)
+add_minifi_option(FAIL_ON_WARNINGS "Treat warnings as errors" OFF)
+add_minifi_option(USE_REAL_ODBC_TEST_DRIVER "Use SQLite ODBC driver in SQL extenstion unit tests instead of a mock database" OFF)
+# This is needed for ninja:
+# By default, neither Clang or GCC will add ANSI-formatted colors to your output if they detect
+# the output medium is not a terminal. This means no coloring when using a generator
+# different than "GNU Makefiles".
+add_minifi_option (FORCE_COLORED_OUTPUT "Always produce ANSI-colored output (GNU/Clang only)." FALSE)
+add_minifi_option(AWS_ENABLE_UNITY_BUILD "If enabled, AWS SDK libraries will be built as a single, generated .cpp file. \
+	This can significantly reduce static library size as well as speed up a single compilation time, but it is regenerated \
+	and recompiled in every iterative build instance. Turn off to avoid recompilation." ON)
+
+add_minifi_dependent_option(ASAN_BUILD "Uses AddressSanitizer to instrument the code" OFF "NOT WIN32" OFF)
+
+# Option: STRICT_GSL_CHECKS
+# AUDIT: Enable all checks, including gsl_ExpectsAudit() and gsl_EnsuresAudit()
+# ON: Enable all checks, excluding gsl_ExpectsAudit() and gsl_EnsuresAudit() (GSL default)
+# DEBUG_ONLY: Like ON in the Debug configuration, OFF in others (MiNiFi C++ default)
+# OFF: Throw on contract checking and assertion failures instead of calling std::terminate()
+set(STRICT_GSL_CHECKS "DEBUG_ONLY" CACHE STRING "Contract checking and assertion failures call terminate")
+list(APPEND STRICT_GSL_CHECKS_Values AUDIT ON DEBUG_ONLY OFF)
+set_property(CACHE STRICT_GSL_CHECKS PROPERTY STRINGS ${STRICT_GSL_CHECKS_Values})
+
+if (WIN32)
+    add_minifi_option(MSI_REDISTRIBUTE_UCRT_NONASL "Redistribute Universal C Runtime DLLs with the MSI generated by CPack. The resulting MSI is not distributable under Apache 2.0." OFF)
+    add_minifi_option(ENABLE_WEL "Enables the suite of Windows Event Log extensions." OFF)
+    add_minifi_option(ENABLE_PDH "Enables PDH support." OFF)
+endif()
+
+if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
+    add_minifi_option(ENABLE_SYSTEMD "Enables the systemd extension." ON)
+endif()
+
+add_minifi_option(DISABLE_EXPRESSION_LANGUAGE "Disables expression language." OFF)
+add_minifi_option(DISABLE_CIVET "Disables CivetWeb components." OFF)
+add_minifi_option(DISABLE_ROCKSDB "Disables the RocksDB extension." OFF)
+add_minifi_option(DISABLE_LIBARCHIVE "Disables the lib archive extensions." OFF)
+add_minifi_option(DISABLE_LZMA "Disables the liblzma build" OFF)
+add_minifi_option(DISABLE_BZIP2 "Disables the bzip2 build" OFF)
+add_minifi_option(ENABLE_GPS "Enables the GPS extension." OFF)
+add_minifi_option(ENABLE_COAP "Enables the CoAP extension." OFF)
+add_minifi_option(ENABLE_SQL "Enables the SQL Suite of Tools." ON)
+add_minifi_option(ENABLE_MQTT "Enables the mqtt extension." OFF)
+add_minifi_option(ENABLE_PCAP "Enables the PCAP extension." OFF)
+add_minifi_option(ENABLE_LIBRDKAFKA "Enables the librdkafka extension." ON)
+add_minifi_option(ENABLE_SCRIPTING "Enables the scripting extensions." OFF)
+add_minifi_option(ENABLE_LUA_SCRIPTING "Enables lua scripting" OFF)
+add_minifi_option(DISABLE_PYTHON_SCRIPTING "Disables python scripting" OFF)
+add_minifi_option(ENABLE_SENSORS "Enables the Sensors package." OFF)
+add_minifi_option(ENABLE_USB_CAMERA "Enables USB camera support." OFF)
+add_minifi_option(ENABLE_TENSORFLOW "Enables the TensorFlow extensions." OFF)  ## Disabled by default because TF can be complex/environment-specific to build
+add_minifi_option(ENABLE_AWS "Enables AWS support." ON)
+add_minifi_option(ENABLE_OPENCV "Enables the OpenCV extensions." OFF)
+add_minifi_option(ENABLE_BUSTACHE "Enables Bustache (ApplyTemplate) support." OFF)
+add_minifi_option(ENABLE_SFTP "Enables SFTP support." OFF)
+add_minifi_option(ENABLE_OPENWSMAN "Enables the Openwsman extensions." OFF)
+add_minifi_option(ENABLE_AZURE "Enables Azure support." ON)
+add_minifi_option(ENABLE_ENCRYPT_CONFIG "Enables build of encrypt-config binary." ON)
+add_minifi_option(ENABLE_SPLUNK "Enable Splunk support" ON)
+add_minifi_option(ENABLE_ELASTICSEARCH "Enable Elasticsearch support" OFF)
+add_minifi_option(ENABLE_GCP "Enable Google Cloud support" ON)
+add_minifi_option(ENABLE_KUBERNETES "Enables the Kubernetes extensions." OFF)
+add_minifi_option(ENABLE_TEST_PROCESSORS "Enables test processors" OFF)
+add_minifi_option(ENABLE_PROMETHEUS "Enables Prometheus support." OFF)
+add_minifi_option(DISABLE_JEMALLOC "Disables jemalloc." OFF)
+
+if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
+    add_minifi_option(ENABLE_PROCFS "Enables the procfs extension." ON)
+endif()
+
+
+# Docker options
+
+function(get_minifi_docker_options RET_VALUE)
+    set(MINIFI_DOCKER_OPTIONS_STR ${MINIFI_EXTERNAL_DOCKER_OPTIONS_STR})
+    foreach(MINIFI_OPTION ${MINIFI_OPTIONS})
+        if (MINIFI_OPTION STREQUAL "CI_BUILD" OR MINIFI_OPTION STREQUAL "ENABLE_LINTER" OR MINIFI_OPTION STREQUAL "SKIP_TESTS" OR MINIFI_OPTION STREQUAL "DOCKER_BUILD_ONLY")
+            continue()
+        endif()
+        set(MINIFI_DOCKER_OPTIONS_STR "${MINIFI_DOCKER_OPTIONS_STR} -D${MINIFI_OPTION}=${${MINIFI_OPTION}}")
+    endforeach()
+    set(${RET_VALUE} ${MINIFI_DOCKER_OPTIONS_STR} PARENT_SCOPE)
+endfunction()
+
+set(MINIFI_DOCKER_OPTIONS_STR "")
+get_minifi_docker_options(MINIFI_DOCKER_OPTIONS_STR)
diff --git a/docker/DockerBuild.sh b/docker/DockerBuild.sh
index 77341cc36..527e14821 100755
--- a/docker/DockerBuild.sh
+++ b/docker/DockerBuild.sh
@@ -40,67 +40,73 @@ function usage {
   echo "-d, --distro-name     Linux distribution build to be used for alternative builds (bionic|focal|fedora|centos)"
   echo "-l  --dump-location   Path where to the output dump to be put"
   echo "-c  --cmake-param     CMake parameter passed in PARAM=value format"
+  echo "-o  --options         Minifi options string"
   echo "-h  --help            Show this help message"
   exit 1
 }
 
-BUILD_ARGS=""
+BUILD_ARGS=()
 while [[ $# -gt 0 ]]; do
   key="$1"
   case $key in
-    -u|--uid)
-      UID_ARG="$2"
-      shift
-      shift
-      ;;
-    -g|--gid)
-      GID_ARG="$2"
-      shift
-      shift
+  -u | --uid)
+    UID_ARG="$2"
+    shift
+    shift
     ;;
-    -v|--minifi-version)
-      MINIFI_VERSION="$2"
-      shift
-      shift
-      ;;
-    -t|--tag)
-      IMAGE_TAG="$2"
-      shift
-      shift
-      ;;
-    -d|--distro-name)
-      DISTRO_NAME="$2"
-      shift
-      shift
-      ;;
-    -l|--dump-location)
-      DUMP_LOCATION="$2"
-      shift
-      shift
-      ;;
-    -c|--cmake-param)
-      IFS='=' read -ra ARR <<< "$2"
-      if [[ ${#ARR[@]} -gt 1 ]]; then
-        if [ "${ARR[0]}" == "BUILD_NUMBER" ]; then
-          BUILD_NUMBER="${ARR[1]}"
-        elif [ "${ARR[0]}" == "DOCKER_BASE_IMAGE" ]; then
-          BUILD_ARGS="${BUILD_ARGS} --build-arg BASE_ALPINE_IMAGE=${ARR[1]}"
-        elif [ "${ARR[0]}" == "DOCKER_CCACHE_DUMP_LOCATION" ]; then
-          DOCKER_CCACHE_DUMP_LOCATION="${ARR[1]}"
-        else
-          BUILD_ARGS="${BUILD_ARGS} --build-arg ${ARR[0]}=${ARR[1]}"
-        fi
+  -g | --gid)
+    GID_ARG="$2"
+    shift
+    shift
+    ;;
+  -v | --minifi-version)
+    MINIFI_VERSION="$2"
+    shift
+    shift
+    ;;
+  -t | --tag)
+    IMAGE_TAG="$2"
+    shift
+    shift
+    ;;
+  -d | --distro-name)
+    DISTRO_NAME="$2"
+    shift
+    shift
+    ;;
+  -l | --dump-location)
+    DUMP_LOCATION="$2"
+    shift
+    shift
+    ;;
+  -c | --cmake-param)
+    IFS='=' read -ra ARR <<<"$2"
+    if [[ ${#ARR[@]} -gt 1 ]]; then
+      if [ "${ARR[0]}" == "BUILD_NUMBER" ]; then
+        BUILD_NUMBER="${ARR[1]}"
+      elif [ "${ARR[0]}" == "DOCKER_BASE_IMAGE" ]; then
+        BUILD_ARGS+=("--build-arg BASE_ALPINE_IMAGE=${ARR[1]}")
+      elif [ "${ARR[0]}" == "DOCKER_CCACHE_DUMP_LOCATION" ]; then
+        DOCKER_CCACHE_DUMP_LOCATION="${ARR[1]}"
+      else
+        BUILD_ARGS+=("--build-arg ${ARR[0]}=${ARR[1]}")
       fi
-      shift
-      shift
-      ;;
-    -h|--help)
-      usage
-      ;;
-    *)
-      echo "Unknown argument passed: $1"
-      usage
-      ;;
+    fi
+    shift
+    shift
+    ;;
+  -o | --options)
+    BUILD_ARGS+=("--build-arg" "MINIFI_OPTIONS=$2")
+    shift
+    shift
+    ;;
+  -h | --help)
+    usage
+    ;;
+  *)
+    echo "Unknown argument passed: $1"
+    usage
+    ;;
   esac
 done
 
@@ -136,35 +142,23 @@ if [ -n "${BUILD_NUMBER}" ]; then
   TARGZ_TAG="${TARGZ_TAG}-${BUILD_NUMBER}"
 fi
 
-DOCKER_BUILD_START="docker build "
-BUILD_ARGS="--build-arg UID=${UID_ARG} \
-            --build-arg GID=${GID_ARG} \
-            --build-arg MINIFI_VERSION=${MINIFI_VERSION} \
-            --build-arg DUMP_LOCATION=${DUMP_LOCATION} \
-            --build-arg DISTRO_NAME=${DISTRO_NAME} ${BUILD_ARGS}"
+BUILD_ARGS+=("--build-arg" "UID=${UID_ARG}"
+            "--build-arg" "GID=${GID_ARG}"
+            "--build-arg" "MINIFI_VERSION=${MINIFI_VERSION}"
+            "--build-arg" "DUMP_LOCATION=${DUMP_LOCATION}"
+            "--build-arg" "DISTRO_NAME=${DISTRO_NAME}")
 
 if [ -n "${DOCKER_CCACHE_DUMP_LOCATION}" ]; then
-  DOCKER_COMMAND="${DOCKER_BUILD_START} ${BUILD_ARGS} \
-                -f ${DOCKERFILE} \
-                --target build \
-                -t \
-                minifi_build .."
-  echo "Build image Docker Command: 'DOCKER_BUILDKIT=1 ${DOCKER_COMMAND}'"
-  DOCKER_BUILDKIT=1 ${DOCKER_COMMAND}
-  container_id=$(docker run --rm -d  minifi_build sh -c "while true; do sleep 1; done")
+  DOCKER_BUILDKIT=1 docker build "${BUILD_ARGS[@]}" -f ${DOCKERFILE} --target build -t minifi_build ..
+
+  container_id=$(docker run --rm -d minifi_build sh -c "while true; do sleep 1; done")
   mkdir -p "${DOCKER_CCACHE_DUMP_LOCATION}"
   docker cp "${container_id}:/home/minificpp/.ccache/." "${DOCKER_CCACHE_DUMP_LOCATION}"
   docker rm -f "${container_id}"
 fi
 
-DOCKER_COMMAND="${DOCKER_BUILD_START} ${BUILD_ARGS} \
-                -f ${DOCKERFILE} \
-                -t \
-                apacheminificpp:${TAG} .."
-
-echo "Docker Command: 'DOCKER_BUILDKIT=1 ${DOCKER_COMMAND}'"
-DOCKER_BUILDKIT=1 ${DOCKER_COMMAND}
+DOCKER_BUILDKIT=0 docker build "${BUILD_ARGS[@]}" -f ${DOCKERFILE} -t apacheminificpp:"${TAG}" ..
 
 if [ -n "${DUMP_LOCATION}" ]; then
-  docker run --rm --entrypoint cat "apacheminificpp:${TAG}" "/opt/minifi/build/nifi-minifi-cpp-${MINIFI_VERSION}.tar.gz" > "${DUMP_LOCATION}/nifi-minifi-cpp-${MINIFI_VERSION}-${TARGZ_TAG}.tar.gz"
+  docker run --rm --entrypoint cat "apacheminificpp:${TAG}" "/opt/minifi/build/nifi-minifi-cpp-${MINIFI_VERSION}.tar.gz" >"${DUMP_LOCATION}/nifi-minifi-cpp-${MINIFI_VERSION}-${TARGZ_TAG}.tar.gz"
 fi
diff --git a/docker/DockerVerify.sh b/docker/DockerVerify.sh
index 4c409a57f..d5e99f1a4 100755
--- a/docker/DockerVerify.sh
+++ b/docker/DockerVerify.sh
@@ -17,9 +17,9 @@
 
 set -e
 
-if [[ $# -lt 1 ]]; then
+if [[ $# -lt 2 ]]; then
   echo "Usage:"
-  echo "  ./DockerVerify.sh <MINIFI_VERSION>"
+  echo "  ./DockerVerify.sh <MINIFI_VERSION> <FEATURE_PATH>"
   exit 1
 fi
 
@@ -67,11 +67,11 @@ TEST_DIRECTORY="${docker_dir}/test/integration"
 export TEST_DIRECTORY
 
 # Add --no-logcapture to see logs interleaved with the test output
-BEHAVE_OPTS=(-f pretty --logging-level INFO --logging-clear-handlers --tags ~@no-ci)
+BEHAVE_OPTS=(-f pretty --logging-level INFO --logging-clear-handlers)
 
 # Specify feature or scenario to run a specific test e.g.:
 # behave "${BEHAVE_OPTS[@]}" "features/file_system_operations.feature"
 # behave "${BEHAVE_OPTS[@]}" "features/file_system_operations.feature" -n "Get and put operations run in a simple flow"
 cd "${docker_dir}/test/integration"
 exec
-  behave "${BEHAVE_OPTS[@]}"
+  behave "${BEHAVE_OPTS[@]}" "${@:2}"
diff --git a/docker/Dockerfile b/docker/Dockerfile
index 65d271c0c..305e6ef9b 100644
--- a/docker/Dockerfile
+++ b/docker/Dockerfile
@@ -26,49 +26,9 @@ ARG MINIFI_VERSION
 ARG UID=1000
 ARG GID=1000
 
-# PDH and WEL extensions and not listed as they are Windows specific
-# SYSTEMD extension is turned OFF explicitly as it has no use in an alpine container
-ARG ENABLE_ALL=OFF
-ARG ENABLE_PYTHON=OFF
-ARG ENABLE_OPS=ON
-ARG ENABLE_JNI=OFF
-ARG ENABLE_OPENCV=OFF
-ARG ENABLE_OPC=OFF
-ARG ENABLE_GPS=OFF
-ARG ENABLE_COAP=OFF
-ARG ENABLE_SQL=OFF
-ARG ENABLE_MQTT=OFF
-ARG ENABLE_PCAP=OFF
-ARG ENABLE_LIBRDKAFKA=OFF
-ARG ENABLE_SENSORS=OFF
-ARG ENABLE_USB_CAMERA=OFF
-ARG ENABLE_TENSORFLOW=OFF
-ARG ENABLE_AWS=OFF
-ARG ENABLE_BUSTACHE=OFF
-ARG ENABLE_SFTP=OFF
-ARG ENABLE_OPENWSMAN=OFF
-ARG ENABLE_AZURE=OFF
-ARG ENABLE_ENCRYPT_CONFIG=ON
-ARG ENABLE_NANOFI=OFF
-ARG ENABLE_SPLUNK=OFF
-ARG ENABLE_GCP=OFF
-ARG ENABLE_ELASTICSEARCH=OFF
-ARG ENABLE_TEST_PROCESSORS=OFF
-ARG DISABLE_CURL=OFF
-ARG DISABLE_JEMALLOC=ON
-ARG DISABLE_CIVET=OFF
-ARG DISABLE_EXPRESSION_LANGUAGE=OFF
-ARG DISABLE_ROCKSDB=OFF
-ARG DISABLE_LIBARCHIVE=OFF
-ARG DISABLE_LZMA=OFF
-ARG DISABLE_BZIP2=OFF
-ARG ENABLE_SCRIPTING=OFF
-ARG DISABLE_PYTHON_SCRIPTING=
-ARG ENABLE_LUA_SCRIPTING=
-ARG ENABLE_KUBERNETES=OFF
-ARG ENABLE_PROCFS=OFF
-ARG ENABLE_PROMETHEUS=OFF
-ARG DISABLE_CONTROLLER=OFF
+# MINIFI_OPTIONS will be passed directly to cmake
+# use it to define cmake options (e.g. -DENABLE_AWS=ON -DENABLE_AZURE=ON)
+ARG MINIFI_OPTIONS=""
 ARG CMAKE_BUILD_TYPE=Release
 
 # Install the system dependencies needed for a build
@@ -117,19 +77,7 @@ USER ${USER}
 ENV PATH /usr/lib/ccache/bin:${PATH}
 RUN mkdir ${MINIFI_BASE_DIR}/build
 WORKDIR ${MINIFI_BASE_DIR}/build
-RUN cmake -DSTATIC_BUILD= -DSKIP_TESTS=true -DENABLE_ALL="${ENABLE_ALL}" -DENABLE_PYTHON="${ENABLE_PYTHON}" -DENABLE_OPS="${ENABLE_OPS}" \
-    -DENABLE_JNI="${ENABLE_JNI}" -DENABLE_OPENCV="${ENABLE_OPENCV}" -DENABLE_OPC="${ENABLE_OPC}" -DENABLE_GPS="${ENABLE_GPS}" \
-    -DENABLE_COAP="${ENABLE_COAP}" -DENABLE_SQL="${ENABLE_SQL}" -DENABLE_MQTT="${ENABLE_MQTT}" -DENABLE_PCAP="${ENABLE_PCAP}" \
-    -DENABLE_LIBRDKAFKA="${ENABLE_LIBRDKAFKA}" -DENABLE_SENSORS="${ENABLE_SENSORS}" -DENABLE_USB_CAMERA="${ENABLE_USB_CAMERA}" \
-    -DENABLE_TENSORFLOW="${ENABLE_TENSORFLOW}" -DENABLE_AWS="${ENABLE_AWS}" -DENABLE_BUSTACHE="${ENABLE_BUSTACHE}" -DENABLE_SFTP="${ENABLE_SFTP}" \
-    -DENABLE_OPENWSMAN="${ENABLE_OPENWSMAN}" -DENABLE_AZURE="${ENABLE_AZURE}" -DENABLE_NANOFI=${ENABLE_NANOFI} -DENABLE_SYSTEMD=OFF \
-    -DDISABLE_CURL="${DISABLE_CURL}" -DDISABLE_JEMALLOC="${DISABLE_JEMALLOC}" -DDISABLE_CIVET="${DISABLE_CIVET}" -DENABLE_SPLUNK=${ENABLE_SPLUNK} \
-    -DENABLE_TEST_PROCESSORS="${ENABLE_TEST_PROCESSORS}" -DDISABLE_EXPRESSION_LANGUAGE="${DISABLE_EXPRESSION_LANGUAGE}" -DDISABLE_ROCKSDB="${DISABLE_ROCKSDB}" \
-    -DDISABLE_LIBARCHIVE="${DISABLE_LIBARCHIVE}" -DDISABLE_LZMA="${DISABLE_LZMA}" -DDISABLE_BZIP2="${DISABLE_BZIP2}" \
-    -DENABLE_SCRIPTING="${ENABLE_SCRIPTING}" -DDISABLE_PYTHON_SCRIPTING="${DISABLE_PYTHON_SCRIPTING}" -DENABLE_LUA_SCRIPTING="${ENABLE_LUA_SCRIPTING}" \
-    -DENABLE_KUBERNETES="${ENABLE_KUBERNETES}" -DENABLE_GCP="${ENABLE_GCP}" -DENABLE_PROCFS="${ENABLE_PROCFS}" -DENABLE_PROMETHEUS="${ENABLE_PROMETHEUS}" \
-    -DENABLE_ELASTICSEARCH="${ENABLE_ELASTICSEARCH}" -DDISABLE_CONTROLLER="${DISABLE_CONTROLLER}" -DENABLE_ENCRYPT_CONFIG="${ENABLE_ENCRYPT_CONFIG}" \
-    -DAWS_ENABLE_UNITY_BUILD=OFF -DEXCLUDE_BOOST=ON -DCMAKE_BUILD_TYPE="${CMAKE_BUILD_TYPE}" .. && \
+RUN cmake -DSTATIC_BUILD= -DSKIP_TESTS=true ${MINIFI_OPTIONS} -DAWS_ENABLE_UNITY_BUILD=OFF -DEXCLUDE_BOOST=ON -DCMAKE_BUILD_TYPE="${CMAKE_BUILD_TYPE}" .. && \
     make -j "$(nproc)" package && \
     tar -xzvf "${MINIFI_BASE_DIR}/build/nifi-minifi-cpp-${MINIFI_VERSION}.tar.gz" -C "${MINIFI_BASE_DIR}"
 
@@ -142,17 +90,7 @@ ARG UID=1000
 ARG GID=1000
 ARG MINIFI_VERSION
 
-ARG ENABLE_GPS=OFF
-ARG ENABLE_JNI=OFF
-ARG ENABLE_PCAP=OFF
-ARG ENABLE_USB_CAMERA=OFF
-ARG ENABLE_OPENCV=OFF
-ARG ENABLE_PYTHON=OFF
-ARG ENABLE_BUSTACHE=OFF
-ARG ENABLE_SCRIPTING=OFF
-ARG DISABLE_PYTHON_SCRIPTING=
-ARG ENABLE_LUA_SCRIPTING=
-ARG ENABLE_KUBERNETES=OFF
+ARG MINIFI_OPTIONS
 
 # Add testing repo for rocksdb
 RUN echo 'http://dl-cdn.alpinelinux.org/alpine/edge/testing' >> /etc/apk/repositories
@@ -167,13 +105,13 @@ ENV PATH ${PATH}:/usr/lib/jvm/default-jvm/bin
 RUN addgroup -g ${GID} ${USER} && adduser -u ${UID} -D -G ${USER} -g "" ${USER} && \
     install -d -o ${USER} -g ${USER} ${MINIFI_BASE_DIR} && ln -s ${MINIFI_VERSIONED_HOME} ${MINIFI_HOME} && \
     apk add --no-cache libstdc++ tzdata alpine-conf && \
-    if [ "$ENABLE_GPS" = "ON" ]; then apk add --no-cache gpsd; fi && \
-    if [ "$ENABLE_JNI" = "ON" ]; then apk add --no-cache openjdk8-jre-base; fi && \
-    if [ "$ENABLE_PCAP" = "ON" ]; then apk add --no-cache libpcap; fi && \
-    if [ "$ENABLE_USB_CAMERA" = "ON" ]; then apk add --no-cache libpng libusb; fi && \
-    if [ "$ENABLE_OPENCV" = "ON" ] || [ "$ENABLE_BUSTACHE" = "ON" ]; then apk add --no-cache boost; fi && \
-    if [ "$ENABLE_SCRIPTING" = "ON" ] && [ -n "$ENABLE_LUA_SCRIPTING" ]; then apk add --no-cache lua; fi && \
-    if [ "$ENABLE_SCRIPTING" = "ON" ] && [ -z "$DISABLE_PYTHON_SCRIPTING" ]; then apk add --no-cache python3; fi
+    if echo "$MINIFI_OPTIONS" | grep -q "ENABLE_GPS=ON"; then apk add --no-cache gpsd; fi && \
+    if echo "$MINIFI_OPTIONS" | grep -q "ENABLE_JNI=ON"; then apk add --no-cache openjdk8-jre-base; fi && \
+    if echo "$MINIFI_OPTIONS" | grep -q "ENABLE_PCAP=ON"; then apk add --no-cache libpcap; fi && \
+    if echo "$MINIFI_OPTIONS" | grep -q "ENABLE_USB_CAMERA=ON"; then apk add --no-cache libpng libusb; fi && \
+    if echo "$MINIFI_OPTIONS" | grep -q "ENABLE_OPENCV=ON" || echo "$MINIFI_OPTIONS" | grep -q "ENABLE_BUSTACHE=ON"; then apk add --no-cache boost; fi && \
+    if echo "$MINIFI_OPTIONS" | grep -q "ENABLE_SCRIPTING=ON" && echo "$MINIFI_OPTIONS" | grep -q "ENABLE_LUA_SCRIPTING=ON"; then apk add --no-cache lua; fi && \
+    if echo "$MINIFI_OPTIONS" | grep -q "ENABLE_SCRIPTING=ON" && echo "$MINIFI_OPTIONS" | grep -q "DISABLE_PYTHON_SCRIPTING=OFF"; then apk add --no-cache python3; fi
 
 # Copy built minifi distribution from builder
 COPY --from=build --chown=${USER}:${USER} ${MINIFI_VERSIONED_HOME} ${MINIFI_HOME}
diff --git a/docker/bionic/Dockerfile b/docker/bionic/Dockerfile
index c152d05a2..4bf1bb1f6 100644
--- a/docker/bionic/Dockerfile
+++ b/docker/bionic/Dockerfile
@@ -37,47 +37,9 @@ COPY . ${MINIFI_BASE_DIR}
 
 FROM build_deps AS release
 
-ARG ENABLE_ALL=OFF
-ARG ENABLE_PYTHON=OFF
-ARG ENABLE_OPS=ON
-ARG ENABLE_JNI=OFF
-ARG ENABLE_OPENCV=OFF
-ARG ENABLE_OPC=OFF
-ARG ENABLE_GPS=OFF
-ARG ENABLE_COAP=OFF
-ARG ENABLE_SQL=OFF
-ARG ENABLE_MQTT=OFF
-ARG ENABLE_PCAP=OFF
-ARG ENABLE_LIBRDKAFKA=OFF
-ARG ENABLE_SENSORS=OFF
-ARG ENABLE_USB_CAMERA=OFF
-ARG ENABLE_TENSORFLOW=OFF
-ARG ENABLE_AWS=OFF
-ARG ENABLE_BUSTACHE=OFF
-ARG ENABLE_SFTP=OFF
-ARG ENABLE_OPENWSMAN=OFF
-ARG ENABLE_AZURE=OFF
-ARG ENABLE_ENCRYPT_CONFIG=ON
-ARG ENABLE_NANOFI=OFF
-ARG ENABLE_SPLUNK=OFF
-ARG ENABLE_GCP=OFF
-ARG ENABLE_ELASTICSEARCH=OFF
-ARG ENABLE_SYSTEMD=ON
-ARG DISABLE_CURL=OFF
-ARG DISABLE_JEMALLOC=ON
-ARG DISABLE_CIVET=OFF
-ARG DISABLE_EXPRESSION_LANGUAGE=OFF
-ARG DISABLE_ROCKSDB=OFF
-ARG DISABLE_LIBARCHIVE=OFF
-ARG DISABLE_LZMA=OFF
-ARG DISABLE_BZIP2=OFF
-ARG ENABLE_SCRIPTING=OFF
-ARG DISABLE_PYTHON_SCRIPTING=ON
-ARG ENABLE_LUA_SCRIPTING=ON
-ARG ENABLE_KUBERNETES=OFF
-ARG ENABLE_PROCFS=OFF
-ARG ENABLE_PROMETHEUS=OFF
-ARG DISABLE_CONTROLLER=OFF
+# MINIFI_OPTIONS will be passed directly to cmake
+# use it to define cmake options (e.g. -DENABLE_AWS=ON -DENABLE_AZURE=ON)
+ARG MINIFI_OPTIONS=""
 ARG CMAKE_BUILD_TYPE=Release
 
 ENV CC gcc-11
@@ -87,17 +49,5 @@ ENV CXX g++-11
 RUN cd $MINIFI_BASE_DIR \
     && ./bootstrap.sh -t \
     && cd $MINIFI_BASE_DIR/build \
-    && cmake -DSTATIC_BUILD= -DSKIP_TESTS=true -DENABLE_ALL="${ENABLE_ALL}" -DENABLE_PYTHON="${ENABLE_PYTHON}" -DENABLE_OPS="${ENABLE_OPS}" \
-    -DENABLE_JNI="${ENABLE_JNI}" -DENABLE_OPENCV="${ENABLE_OPENCV}" -DENABLE_OPC="${ENABLE_OPC}" -DENABLE_GPS="${ENABLE_GPS}" \
-    -DENABLE_COAP="${ENABLE_COAP}" -DENABLE_SQL="${ENABLE_SQL}" -DENABLE_MQTT="${ENABLE_MQTT}" -DENABLE_PCAP="${ENABLE_PCAP}" \
-    -DENABLE_LIBRDKAFKA="${ENABLE_LIBRDKAFKA}" -DENABLE_SENSORS="${ENABLE_SENSORS}" -DENABLE_USB_CAMERA="${ENABLE_USB_CAMERA}" \
-    -DENABLE_TENSORFLOW="${ENABLE_TENSORFLOW}" -DENABLE_AWS="${ENABLE_AWS}" -DENABLE_BUSTACHE="${ENABLE_BUSTACHE}" -DENABLE_SFTP="${ENABLE_SFTP}" \
-    -DENABLE_OPENWSMAN="${ENABLE_OPENWSMAN}" -DENABLE_AZURE="${ENABLE_AZURE}" -DENABLE_NANOFI=${ENABLE_NANOFI} -DENABLE_SYSTEMD="${ENABLE_SYSTEMD}" \
-    -DDISABLE_CURL="${DISABLE_CURL}" -DDISABLE_JEMALLOC="${DISABLE_JEMALLOC}" -DDISABLE_CIVET="${DISABLE_CIVET}" -DENABLE_SPLUNK=${ENABLE_SPLUNK} \
-    -DENABLE_TEST_PROCESSORS=OFF -DDISABLE_EXPRESSION_LANGUAGE="${DISABLE_EXPRESSION_LANGUAGE}" -DDISABLE_ROCKSDB="${DISABLE_ROCKSDB}" \
-    -DDISABLE_LIBARCHIVE="${DISABLE_LIBARCHIVE}" -DDISABLE_LZMA="${DISABLE_LZMA}" -DDISABLE_BZIP2="${DISABLE_BZIP2}" \
-    -DENABLE_SCRIPTING="${ENABLE_SCRIPTING}" -DDISABLE_PYTHON_SCRIPTING="${DISABLE_PYTHON_SCRIPTING}" -DENABLE_LUA_SCRIPTING="${ENABLE_LUA_SCRIPTING}" \
-    -DENABLE_KUBERNETES="${ENABLE_KUBERNETES}" -DENABLE_GCP="${ENABLE_GCP}" -DENABLE_PROCFS="${ENABLE_PROCFS}" -DENABLE_PROMETHEUS="${ENABLE_PROMETHEUS}" \
-    -DENABLE_ELASTICSEARCH="${ENABLE_ELASTICSEARCH}" -DDISABLE_CONTROLLER="${DISABLE_CONTROLLER}" -DENABLE_ENCRYPT_CONFIG="${ENABLE_ENCRYPT_CONFIG}" \
-    -DAWS_ENABLE_UNITY_BUILD=OFF -DEXCLUDE_BOOST=ON -DCMAKE_BUILD_TYPE="${CMAKE_BUILD_TYPE}" .. \
+    && cmake -DSTATIC_BUILD= -DSKIP_TESTS=true ${MINIFI_OPTIONS} -DAWS_ENABLE_UNITY_BUILD=OFF -DEXCLUDE_BOOST=ON -DCMAKE_BUILD_TYPE="${CMAKE_BUILD_TYPE}" .. \
     && make -j "$(nproc)" package
diff --git a/docker/centos/Dockerfile b/docker/centos/Dockerfile
index d1c90fcd9..285b567e6 100644
--- a/docker/centos/Dockerfile
+++ b/docker/centos/Dockerfile
@@ -35,64 +35,15 @@ RUN mkdir -p $MINIFI_BASE_DIR
 COPY . ${MINIFI_BASE_DIR}
 
 FROM build_deps AS release
-ARG ENABLE_ALL=OFF
-ARG ENABLE_PYTHON=OFF
-ARG ENABLE_OPS=ON
-ARG ENABLE_JNI=OFF
-ARG ENABLE_OPENCV=OFF
-ARG ENABLE_OPC=OFF
-ARG ENABLE_GPS=OFF
-ARG ENABLE_COAP=OFF
-ARG ENABLE_SQL=ON
-ARG ENABLE_MQTT=ON
-ARG ENABLE_PCAP=OFF
-ARG ENABLE_LIBRDKAFKA=ON
-ARG ENABLE_SENSORS=OFF
-ARG ENABLE_USB_CAMERA=OFF
-ARG ENABLE_TENSORFLOW=OFF
-ARG ENABLE_AWS=ON
-ARG ENABLE_BUSTACHE=OFF
-ARG ENABLE_SFTP=OFF
-ARG ENABLE_OPENWSMAN=OFF
-ARG ENABLE_AZURE=ON
-ARG ENABLE_ENCRYPT_CONFIG=ON
-ARG ENABLE_NANOFI=OFF
-ARG ENABLE_SPLUNK=ON
-ARG ENABLE_GCP=ON
-ARG ENABLE_ELASTICSEARCH=OFF
-ARG ENABLE_SYSTEMD=ON
-ARG DISABLE_CURL=OFF
-ARG DISABLE_JEMALLOC=ON
-ARG DISABLE_CIVET=OFF
-ARG DISABLE_EXPRESSION_LANGUAGE=OFF
-ARG DISABLE_ROCKSDB=OFF
-ARG DISABLE_LIBARCHIVE=OFF
-ARG DISABLE_LZMA=OFF
-ARG DISABLE_BZIP2=OFF
-ARG ENABLE_SCRIPTING=OFF
-ARG DISABLE_PYTHON_SCRIPTING=ON
-ARG ENABLE_LUA_SCRIPTING=ON
-ARG ENABLE_KUBERNETES=OFF
-ARG ENABLE_PROCFS=OFF
-ARG ENABLE_PROMETHEUS=OFF
-ARG DISABLE_CONTROLLER=OFF
+
+# MINIFI_OPTIONS will be passed directly to cmake
+# use it to define cmake options (e.g. -DENABLE_AWS=ON -DENABLE_AZURE=ON)
+ARG MINIFI_OPTIONS=""
 ARG CMAKE_BUILD_TYPE=Release
 # Perform the build
 RUN cd $MINIFI_BASE_DIR \
 	&& ./bootstrap.sh -t \
 	&& cd build \
-    && scl enable devtoolset-10 -- cmake3 -DSTATIC_BUILD= -DSKIP_TESTS=true -DENABLE_ALL="${ENABLE_ALL}" -DENABLE_PYTHON="${ENABLE_PYTHON}" -DENABLE_OPS="${ENABLE_OPS}" \
-    -DENABLE_JNI="${ENABLE_JNI}" -DENABLE_OPENCV="${ENABLE_OPENCV}" -DENABLE_OPC="${ENABLE_OPC}" -DENABLE_GPS="${ENABLE_GPS}" \
-    -DENABLE_COAP="${ENABLE_COAP}" -DENABLE_SQL="${ENABLE_SQL}" -DENABLE_MQTT="${ENABLE_MQTT}" -DENABLE_PCAP="${ENABLE_PCAP}" \
-    -DENABLE_LIBRDKAFKA="${ENABLE_LIBRDKAFKA}" -DENABLE_SENSORS="${ENABLE_SENSORS}" -DENABLE_USB_CAMERA="${ENABLE_USB_CAMERA}" \
-    -DENABLE_TENSORFLOW="${ENABLE_TENSORFLOW}" -DENABLE_AWS="${ENABLE_AWS}" -DENABLE_BUSTACHE="${ENABLE_BUSTACHE}" -DENABLE_SFTP="${ENABLE_SFTP}" \
-    -DENABLE_OPENWSMAN="${ENABLE_OPENWSMAN}" -DENABLE_AZURE="${ENABLE_AZURE}" -DENABLE_NANOFI=${ENABLE_NANOFI} -DENABLE_SYSTEMD="${ENABLE_SYSTEMD}" \
-    -DDISABLE_CURL="${DISABLE_CURL}" -DDISABLE_JEMALLOC="${DISABLE_JEMALLOC}" -DDISABLE_CIVET="${DISABLE_CIVET}" -DENABLE_SPLUNK=${ENABLE_SPLUNK} \
-    -DENABLE_TEST_PROCESSORS=OFF -DDISABLE_EXPRESSION_LANGUAGE="${DISABLE_EXPRESSION_LANGUAGE}" -DDISABLE_ROCKSDB="${DISABLE_ROCKSDB}" \
-    -DDISABLE_LIBARCHIVE="${DISABLE_LIBARCHIVE}" -DDISABLE_LZMA="${DISABLE_LZMA}" -DDISABLE_BZIP2="${DISABLE_BZIP2}" \
-    -DENABLE_SCRIPTING="${ENABLE_SCRIPTING}" -DDISABLE_PYTHON_SCRIPTING="${DISABLE_PYTHON_SCRIPTING}" -DENABLE_LUA_SCRIPTING="${ENABLE_LUA_SCRIPTING}" \
-    -DENABLE_KUBERNETES="${ENABLE_KUBERNETES}" -DENABLE_GCP="${ENABLE_GCP}" -DENABLE_PROCFS="${ENABLE_PROCFS}" -DENABLE_PROMETHEUS="${ENABLE_PROMETHEUS}" \
-    -DENABLE_ELASTICSEARCH="${ENABLE_ELASTICSEARCH}" -DDISABLE_CONTROLLER="${DISABLE_CONTROLLER}" -DENABLE_ENCRYPT_CONFIG="${ENABLE_ENCRYPT_CONFIG}" \
-    -DAWS_ENABLE_UNITY_BUILD=OFF -DEXCLUDE_BOOST=ON -DCMAKE_BUILD_TYPE="${CMAKE_BUILD_TYPE}" .. \
+    && scl enable devtoolset-10 -- cmake3 -DSTATIC_BUILD= -DSKIP_TESTS=true ${MINIFI_OPTIONS} -DAWS_ENABLE_UNITY_BUILD=OFF -DEXCLUDE_BOOST=ON -DCMAKE_BUILD_TYPE="${CMAKE_BUILD_TYPE}" .. \
     && scl enable devtoolset-10 -- make -j "$(nproc)" package
 
diff --git a/docker/fedora/Dockerfile b/docker/fedora/Dockerfile
index ae60d6c51..17278299c 100644
--- a/docker/fedora/Dockerfile
+++ b/docker/fedora/Dockerfile
@@ -39,47 +39,10 @@ COPY . ${MINIFI_BASE_DIR}
 
 
 FROM build_deps AS release
-ARG ENABLE_ALL=OFF
-ARG ENABLE_PYTHON=OFF
-ARG ENABLE_OPS=ON
-ARG ENABLE_JNI=OFF
-ARG ENABLE_OPENCV=OFF
-ARG ENABLE_OPC=OFF
-ARG ENABLE_GPS=OFF
-ARG ENABLE_COAP=OFF
-ARG ENABLE_SQL=ON
-ARG ENABLE_MQTT=ON
-ARG ENABLE_PCAP=OFF
-ARG ENABLE_LIBRDKAFKA=ON
-ARG ENABLE_SENSORS=OFF
-ARG ENABLE_USB_CAMERA=OFF
-ARG ENABLE_TENSORFLOW=OFF
-ARG ENABLE_AWS=ON
-ARG ENABLE_BUSTACHE=OFF
-ARG ENABLE_SFTP=OFF
-ARG ENABLE_OPENWSMAN=OFF
-ARG ENABLE_AZURE=ON
-ARG ENABLE_ENCRYPT_CONFIG=ON
-ARG ENABLE_NANOFI=OFF
-ARG ENABLE_SPLUNK=ON
-ARG ENABLE_GCP=ON
-ARG ENABLE_ELASTICSEARCH=OFF
-ARG ENABLE_SYSTEMD=ON
-ARG DISABLE_CURL=OFF
-ARG DISABLE_JEMALLOC=ON
-ARG DISABLE_CIVET=OFF
-ARG DISABLE_EXPRESSION_LANGUAGE=OFF
-ARG DISABLE_ROCKSDB=OFF
-ARG DISABLE_LIBARCHIVE=OFF
-ARG DISABLE_LZMA=OFF
-ARG DISABLE_BZIP2=OFF
-ARG ENABLE_SCRIPTING=OFF
-ARG DISABLE_PYTHON_SCRIPTING=ON
-ARG ENABLE_LUA_SCRIPTING=ON
-ARG ENABLE_KUBERNETES=OFF
-ARG ENABLE_PROCFS=OFF
-ARG ENABLE_PROMETHEUS=OFF
-ARG DISABLE_CONTROLLER=OFF
+
+# MINIFI_OPTIONS will be passed directly to cmake
+# use it to define cmake options (e.g. -DENABLE_AWS=ON -DENABLE_AZURE=ON)
+ARG MINIFI_OPTIONS=""
 ARG CMAKE_BUILD_TYPE=Release
 # Perform the build
 RUN cd $MINIFI_BASE_DIR \
@@ -87,18 +50,6 @@ RUN cd $MINIFI_BASE_DIR \
 	&& rm -rf build \
 	&& mkdir build \
 	&& cd build \
-    && cmake3 -DSTATIC_BUILD= -DSKIP_TESTS=true -DENABLE_ALL="${ENABLE_ALL}" -DENABLE_PYTHON="${ENABLE_PYTHON}" -DENABLE_OPS="${ENABLE_OPS}" \
-    -DENABLE_JNI="${ENABLE_JNI}" -DENABLE_OPENCV="${ENABLE_OPENCV}" -DENABLE_OPC="${ENABLE_OPC}" -DENABLE_GPS="${ENABLE_GPS}" \
-    -DENABLE_COAP="${ENABLE_COAP}" -DENABLE_SQL="${ENABLE_SQL}" -DENABLE_MQTT="${ENABLE_MQTT}" -DENABLE_PCAP="${ENABLE_PCAP}" \
-    -DENABLE_LIBRDKAFKA="${ENABLE_LIBRDKAFKA}" -DENABLE_SENSORS="${ENABLE_SENSORS}" -DENABLE_USB_CAMERA="${ENABLE_USB_CAMERA}" \
-    -DENABLE_TENSORFLOW="${ENABLE_TENSORFLOW}" -DENABLE_AWS="${ENABLE_AWS}" -DENABLE_BUSTACHE="${ENABLE_BUSTACHE}" -DENABLE_SFTP="${ENABLE_SFTP}" \
-    -DENABLE_OPENWSMAN="${ENABLE_OPENWSMAN}" -DENABLE_AZURE="${ENABLE_AZURE}" -DENABLE_NANOFI=${ENABLE_NANOFI} -DENABLE_SYSTEMD="${ENABLE_SYSTEMD}" \
-    -DDISABLE_CURL="${DISABLE_CURL}" -DDISABLE_JEMALLOC="${DISABLE_JEMALLOC}" -DDISABLE_CIVET="${DISABLE_CIVET}" -DENABLE_SPLUNK=${ENABLE_SPLUNK} \
-    -DENABLE_TEST_PROCESSORS=OFF -DDISABLE_EXPRESSION_LANGUAGE="${DISABLE_EXPRESSION_LANGUAGE}" -DDISABLE_ROCKSDB="${DISABLE_ROCKSDB}" \
-    -DDISABLE_LIBARCHIVE="${DISABLE_LIBARCHIVE}" -DDISABLE_LZMA="${DISABLE_LZMA}" -DDISABLE_BZIP2="${DISABLE_BZIP2}" \
-    -DENABLE_SCRIPTING="${ENABLE_SCRIPTING}" -DDISABLE_PYTHON_SCRIPTING="${DISABLE_PYTHON_SCRIPTING}" -DENABLE_LUA_SCRIPTING="${ENABLE_LUA_SCRIPTING}" \
-    -DENABLE_KUBERNETES="${ENABLE_KUBERNETES}" -DENABLE_GCP="${ENABLE_GCP}" -DENABLE_PROCFS="${ENABLE_PROCFS}" -DENABLE_PROMETHEUS="${ENABLE_PROMETHEUS}" \
-    -DENABLE_ELASTICSEARCH="${ENABLE_ELASTICSEARCH}" -DDISABLE_CONTROLLER="${DISABLE_CONTROLLER}" -DENABLE_ENCRYPT_CONFIG="${ENABLE_ENCRYPT_CONFIG}" \
-    -DAWS_ENABLE_UNITY_BUILD=OFF -DEXCLUDE_BOOST=ON -DCMAKE_BUILD_TYPE="${CMAKE_BUILD_TYPE}" .. \
+    && cmake3 -DSTATIC_BUILD= -DSKIP_TESTS=true ${MINIFI_OPTIONS} -DAWS_ENABLE_UNITY_BUILD=OFF -DEXCLUDE_BOOST=ON -DCMAKE_BUILD_TYPE="${CMAKE_BUILD_TYPE}" .. \
     && make -j "$(nproc)" package
 
diff --git a/docker/focal/Dockerfile b/docker/focal/Dockerfile
index 74cfe7949..a0220c10f 100644
--- a/docker/focal/Dockerfile
+++ b/docker/focal/Dockerfile
@@ -38,47 +38,9 @@ COPY . ${MINIFI_BASE_DIR}
 
 FROM build_deps AS release
 
-ARG ENABLE_ALL=OFF
-ARG ENABLE_PYTHON=OFF
-ARG ENABLE_OPS=ON
-ARG ENABLE_JNI=OFF
-ARG ENABLE_OPENCV=OFF
-ARG ENABLE_OPC=OFF
-ARG ENABLE_GPS=OFF
-ARG ENABLE_COAP=OFF
-ARG ENABLE_SQL=OFF
-ARG ENABLE_MQTT=OFF
-ARG ENABLE_PCAP=OFF
-ARG ENABLE_LIBRDKAFKA=OFF
-ARG ENABLE_SENSORS=OFF
-ARG ENABLE_USB_CAMERA=OFF
-ARG ENABLE_TENSORFLOW=OFF
-ARG ENABLE_AWS=OFF
-ARG ENABLE_BUSTACHE=OFF
-ARG ENABLE_SFTP=OFF
-ARG ENABLE_OPENWSMAN=OFF
-ARG ENABLE_AZURE=OFF
-ARG ENABLE_ENCRYPT_CONFIG=ON
-ARG ENABLE_NANOFI=OFF
-ARG ENABLE_SPLUNK=OFF
-ARG ENABLE_GCP=OFF
-ARG ENABLE_ELASTICSEARCH=OFF
-ARG ENABLE_SYSTEMD=ON
-ARG DISABLE_CURL=OFF
-ARG DISABLE_JEMALLOC=ON
-ARG DISABLE_CIVET=OFF
-ARG DISABLE_EXPRESSION_LANGUAGE=OFF
-ARG DISABLE_ROCKSDB=OFF
-ARG DISABLE_LIBARCHIVE=OFF
-ARG DISABLE_LZMA=OFF
-ARG DISABLE_BZIP2=OFF
-ARG ENABLE_SCRIPTING=OFF
-ARG DISABLE_PYTHON_SCRIPTING=ON
-ARG ENABLE_LUA_SCRIPTING=ON
-ARG ENABLE_KUBERNETES=OFF
-ARG ENABLE_PROCFS=OFF
-ARG ENABLE_PROMETHEUS=OFF
-ARG DISABLE_CONTROLLER=OFF
+# MINIFI_OPTIONS will be passed directly to cmake
+# use it to define cmake options (e.g. -DENABLE_AWS=ON -DENABLE_AZURE=ON)
+ARG MINIFI_OPTIONS=""
 ARG CMAKE_BUILD_TYPE=Release
 ENV CC gcc-11
 ENV CXX g++-11
@@ -87,17 +49,5 @@ ENV CXX g++-11
 RUN cd $MINIFI_BASE_DIR \
     && ./bootstrap.sh -t \
     && cd $MINIFI_BASE_DIR/build \
-    && cmake -DSTATIC_BUILD= -DSKIP_TESTS=true -DENABLE_ALL="${ENABLE_ALL}" -DENABLE_PYTHON="${ENABLE_PYTHON}" -DENABLE_OPS="${ENABLE_OPS}" \
-    -DENABLE_JNI="${ENABLE_JNI}" -DENABLE_OPENCV="${ENABLE_OPENCV}" -DENABLE_OPC="${ENABLE_OPC}" -DENABLE_GPS="${ENABLE_GPS}" \
-    -DENABLE_COAP="${ENABLE_COAP}" -DENABLE_SQL="${ENABLE_SQL}" -DENABLE_MQTT="${ENABLE_MQTT}" -DENABLE_PCAP="${ENABLE_PCAP}" \
-    -DENABLE_LIBRDKAFKA="${ENABLE_LIBRDKAFKA}" -DENABLE_SENSORS="${ENABLE_SENSORS}" -DENABLE_USB_CAMERA="${ENABLE_USB_CAMERA}" \
-    -DENABLE_TENSORFLOW="${ENABLE_TENSORFLOW}" -DENABLE_AWS="${ENABLE_AWS}" -DENABLE_BUSTACHE="${ENABLE_BUSTACHE}" -DENABLE_SFTP="${ENABLE_SFTP}" \
-    -DENABLE_OPENWSMAN="${ENABLE_OPENWSMAN}" -DENABLE_AZURE="${ENABLE_AZURE}" -DENABLE_NANOFI=${ENABLE_NANOFI} -DENABLE_SYSTEMD="${ENABLE_SYSTEMD}" \
-    -DDISABLE_CURL="${DISABLE_CURL}" -DDISABLE_JEMALLOC="${DISABLE_JEMALLOC}" -DDISABLE_CIVET="${DISABLE_CIVET}" -DENABLE_SPLUNK=${ENABLE_SPLUNK} \
-    -DENABLE_TEST_PROCESSORS=OFF -DDISABLE_EXPRESSION_LANGUAGE="${DISABLE_EXPRESSION_LANGUAGE}" -DDISABLE_ROCKSDB="${DISABLE_ROCKSDB}" \
-    -DDISABLE_LIBARCHIVE="${DISABLE_LIBARCHIVE}" -DDISABLE_LZMA="${DISABLE_LZMA}" -DDISABLE_BZIP2="${DISABLE_BZIP2}" \
-    -DENABLE_SCRIPTING="${ENABLE_SCRIPTING}" -DDISABLE_PYTHON_SCRIPTING="${DISABLE_PYTHON_SCRIPTING}" -DENABLE_LUA_SCRIPTING="${ENABLE_LUA_SCRIPTING}" \
-    -DENABLE_KUBERNETES="${ENABLE_KUBERNETES}" -DENABLE_GCP="${ENABLE_GCP}" -DENABLE_PROCFS="${ENABLE_PROCFS}" -DENABLE_PROMETHEUS="${ENABLE_PROMETHEUS}" \
-    -DENABLE_ELASTICSEARCH="${ENABLE_ELASTICSEARCH}" -DDISABLE_CONTROLLER="${DISABLE_CONTROLLER}" -DENABLE_ENCRYPT_CONFIG="${ENABLE_ENCRYPT_CONFIG}" \
-    -DAWS_ENABLE_UNITY_BUILD=OFF -DEXCLUDE_BOOST=ON -DCMAKE_BUILD_TYPE="${CMAKE_BUILD_TYPE}" .. \
+    && cmake -DSTATIC_BUILD= -DSKIP_TESTS=true ${MINIFI_OPTIONS} -DAWS_ENABLE_UNITY_BUILD=OFF -DEXCLUDE_BOOST=ON -DCMAKE_BUILD_TYPE="${CMAKE_BUILD_TYPE}" .. \
     && make -j "$(nproc)" package
diff --git a/docker/test/integration/features/CMakeLists.txt b/docker/test/integration/features/CMakeLists.txt
new file mode 100644
index 000000000..bf1b3634e
--- /dev/null
+++ b/docker/test/integration/features/CMakeLists.txt
@@ -0,0 +1,87 @@
+# 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.
+
+set(ENABLED_BEHAVE_TESTS "${ENABLED_BEHAVE_TESTS};${CMAKE_CURRENT_SOURCE_DIR}/attributes_to_json.feature")
+set(ENABLED_BEHAVE_TESTS "${ENABLED_BEHAVE_TESTS};${CMAKE_CURRENT_SOURCE_DIR}/core_functionality.feature")
+set(ENABLED_BEHAVE_TESTS "${ENABLED_BEHAVE_TESTS};${CMAKE_CURRENT_SOURCE_DIR}/defragtextflowfiles.feature")
+set(ENABLED_BEHAVE_TESTS "${ENABLED_BEHAVE_TESTS};${CMAKE_CURRENT_SOURCE_DIR}/file_system_operations.feature")
+set(ENABLED_BEHAVE_TESTS "${ENABLED_BEHAVE_TESTS};${CMAKE_CURRENT_SOURCE_DIR}/hashcontent.feature")
+set(ENABLED_BEHAVE_TESTS "${ENABLED_BEHAVE_TESTS};${CMAKE_CURRENT_SOURCE_DIR}/replace_text.feature")
+set(ENABLED_BEHAVE_TESTS "${ENABLED_BEHAVE_TESTS};${CMAKE_CURRENT_SOURCE_DIR}/routetext.feature")
+set(ENABLED_BEHAVE_TESTS "${ENABLED_BEHAVE_TESTS};${CMAKE_CURRENT_SOURCE_DIR}/s2s.feature")
+set(ENABLED_BEHAVE_TESTS "${ENABLED_BEHAVE_TESTS};${CMAKE_CURRENT_SOURCE_DIR}/syslog_listener.feature")
+set(ENABLED_BEHAVE_TESTS "${ENABLED_BEHAVE_TESTS};${CMAKE_CURRENT_SOURCE_DIR}/network_listener.feature")
+
+if (ENABLE_AZURE)
+    set(ENABLED_BEHAVE_TESTS "${ENABLED_BEHAVE_TESTS};${CMAKE_CURRENT_SOURCE_DIR}/azure_storage.feature")
+endif()
+
+if (ENABLE_GCP)
+    set(ENABLED_BEHAVE_TESTS "${ENABLED_BEHAVE_TESTS};${CMAKE_CURRENT_SOURCE_DIR}/google_cloud_storage.feature")
+endif()
+
+if (NOT DISABLE_CIVET)
+    set(ENABLED_BEHAVE_TESTS "${ENABLED_BEHAVE_TESTS};${CMAKE_CURRENT_SOURCE_DIR}/http.feature")
+    set(ENABLED_BEHAVE_TESTS "${ENABLED_BEHAVE_TESTS};${CMAKE_CURRENT_SOURCE_DIR}/https.feature")
+endif()
+
+if (ENABLE_LIBRDKAFKA)
+    set(ENABLED_BEHAVE_TESTS "${ENABLED_BEHAVE_TESTS};${CMAKE_CURRENT_SOURCE_DIR}/kafka.feature")
+endif()
+
+if (ENABLE_KUBERNETES)
+    set(ENABLED_BEHAVE_TESTS "${ENABLED_BEHAVE_TESTS};${CMAKE_CURRENT_SOURCE_DIR}/kubernetes.feature")
+endif()
+
+if (ENABLE_MQTT)
+    set(ENABLED_BEHAVE_TESTS "${ENABLED_BEHAVE_TESTS};${CMAKE_CURRENT_SOURCE_DIR}/mqtt.feature")
+endif()
+
+if (ENABLE_OPC)
+    set(ENABLED_BEHAVE_TESTS "${ENABLED_BEHAVE_TESTS};${CMAKE_CURRENT_SOURCE_DIR}/opcua.feature")
+endif()
+
+if (ENABLE_SCRIPTING)
+    set(ENABLED_BEHAVE_TESTS "${ENABLED_BEHAVE_TESTS};${CMAKE_CURRENT_SOURCE_DIR}/python.feature")
+    set(ENABLED_BEHAVE_TESTS "${ENABLED_BEHAVE_TESTS};${CMAKE_CURRENT_SOURCE_DIR}/script.feature")
+endif()
+
+if (ENABLE_AWS)
+    set(ENABLED_BEHAVE_TESTS "${ENABLED_BEHAVE_TESTS};${CMAKE_CURRENT_SOURCE_DIR}/s3.feature")
+endif()
+
+if (ENABLE_SPLUNK)
+    set(ENABLED_BEHAVE_TESTS "${ENABLED_BEHAVE_TESTS};${CMAKE_CURRENT_SOURCE_DIR}/splunk.feature")
+endif()
+
+if (ENABLE_SQL)
+    set(ENABLED_BEHAVE_TESTS "${ENABLED_BEHAVE_TESTS};${CMAKE_CURRENT_SOURCE_DIR}/sql.feature")
+endif()
+
+if (ENABLE_ELASTICSEARCH AND NOT CI_BUILD) # Elasticsearch/Opensearch containers require more RAM than what the CI environment has
+    set(ENABLED_BEHAVE_TESTS "${ENABLED_BEHAVE_TESTS};${CMAKE_CURRENT_SOURCE_DIR}/elasticsearch.feature")
+    set(ENABLED_BEHAVE_TESTS "${ENABLED_BEHAVE_TESTS};${CMAKE_CURRENT_SOURCE_DIR}/opensearch.feature")
+endif()
+
+if (ENABLE_PROMETHEUS)
+    set(ENABLED_BEHAVE_TESTS "${ENABLED_BEHAVE_TESTS};${CMAKE_CURRENT_SOURCE_DIR}/prometheus.feature")
+endif()
+
+file(GLOB FEATURE_FILES  "*.feature")
+
+set(ENABLED_BEHAVE_TESTS ${ENABLED_BEHAVE_TESTS} PARENT_SCOPE)
+set(ALL_BEHAVE_TESTS ${FEATURE_FILES} PARENT_SCOPE)
diff --git a/docker/test/integration/features/elasticsearch.feature b/docker/test/integration/features/elasticsearch.feature
index f2ebca810..995d47544 100644
--- a/docker/test/integration/features/elasticsearch.feature
+++ b/docker/test/integration/features/elasticsearch.feature
@@ -13,7 +13,6 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-@no-ci  # Elasticsearch container requires more RAM than what the CI environment has
 Feature: Managing documents on Elasticsearch with PostElasticsearch
 
   Background:
diff --git a/docker/test/integration/features/opensearch.feature b/docker/test/integration/features/opensearch.feature
index 0e45e5edd..20f0ea9b9 100644
--- a/docker/test/integration/features/opensearch.feature
+++ b/docker/test/integration/features/opensearch.feature
@@ -13,7 +13,6 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-@no-ci  # Opensearch container requires more RAM than what the CI environment has
 Feature: PostElasticsearch works on Opensearch (Opensearch doesnt support API Keys)
 
   Background:
diff --git a/extensions/sftp/tests/PutSFTPTests.cpp b/extensions/sftp/tests/PutSFTPTests.cpp
index d2977cc5e..09e3c99f8 100644
--- a/extensions/sftp/tests/PutSFTPTests.cpp
+++ b/extensions/sftp/tests/PutSFTPTests.cpp
@@ -41,6 +41,7 @@
 #include "TestBase.h"
 #include "Catch.h"
 #include "Exception.h"
+#include "date/date.h"
 #include "utils/StringUtils.h"
 #include "utils/file/FileUtils.h"
 #include "core/Core.h"
@@ -506,7 +507,7 @@ TEST_CASE_METHOD(PutSFTPTestsFixture, "PutSFTP set mtime", "[PutSFTP]") {
 
   testFile("nifi_test/tstFile1.ext", "content 1");
   using namespace std::chrono;  // NOLINT(build/namespaces)
-  time_point<system_clock> modification_time = sys_days(January / 24 / 2065) + 5h + 20min;
+  system_clock::time_point modification_time = date::sys_days(date::January / 24 / 2065) + 5h + 20min;
   testModificationTime("nifi_test/tstFile1.ext", file_clock::from_sys(modification_time));
 }