You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@nifi.apache.org by "adamdebreceni (via GitHub)" <gi...@apache.org> on 2026/02/12 10:20:52 UTC
[PR] MINIFICPP-2715 - Use symbols to check api compatibility [nifi-minifi-cpp]
adamdebreceni opened a new pull request, #2105:
URL: https://github.com/apache/nifi-minifi-cpp/pull/2105
Thank you for submitting a contribution to Apache NiFi - MiNiFi C++.
In order to streamline the review of the contribution we ask you
to ensure the following steps have been taken:
### For all changes:
- [ ] Is there a JIRA ticket associated with this PR? Is it referenced
in the commit message?
- [ ] Does your PR title start with MINIFICPP-XXXX where XXXX is the JIRA number you are trying to resolve? Pay particular attention to the hyphen "-" character.
- [ ] Has your PR been rebased against the latest commit within the target branch (typically main)?
- [ ] Is your initial contribution a single, squashed commit?
### For code changes:
- [ ] If adding new dependencies to the code, are these dependencies licensed in a way that is compatible for inclusion under [ASF 2.0](http://www.apache.org/legal/resolved.html#category-a)?
- [ ] If applicable, have you updated the LICENSE file?
- [ ] If applicable, have you updated the NOTICE file?
### For documentation related changes:
- [ ] Have you ensured that format looks appropriate for the output in which it is rendered?
### Note:
Please ensure that once the PR is submitted, you check GitHub Actions CI results for build issues and submit an update to your PR as soon as possible.
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: issues-unsubscribe@nifi.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
Re: [PR] MINIFICPP-2715 - Use symbols to check api compatibility [nifi-minifi-cpp]
Posted by "szaszm (via GitHub)" <gi...@apache.org>.
szaszm commented on code in PR #2105:
URL: https://github.com/apache/nifi-minifi-cpp/pull/2105#discussion_r3058190677
##########
Extensions.md:
##########
@@ -17,8 +17,39 @@
To enable all extensions for your platform, you may use -DENABLE_ALL=TRUE OR select the option to "Enable all Extensions" in the bootstrap script. [ReadMe](https://github.com/apache/nifi-minifi-cpp/#bootstrapping)
# Extension internals
-Extensions are dynamic libraries loaded at runtime by the agent. An extension makes its
-capabilities (classes) available to the system through registrars. Registration must happen in source files, not headers.
+Extensions are dynamic libraries loaded at runtime by the agent.
+
+## C extensions
+You can build a shared library depending on the C capabilities of the agent as given in the `minifi-c.h` file.
+For the shared library to be considered a valid extension, it has to have a global symbol with the name `MinifiCApiVersion`
+with its value as a null terminated string (`const char*`) of the macro `MINIFI_API_VERSION` from `minifi-c.h`.
+
+Moreover the actual resource registration (processors/controller services) has to happen during the `MinifiInitExtension` call.
Review Comment:
Is this enforced?
Can we document the option that minifi calls this function multiple times, and it has to make the same registration calls in the same order every time? This would leave more room for changing behavior in a backwards-compatible way later, e.g. call once to track data size and allocate a buffer, call second time to actually copy all of the data to minifi buffers. Or unload and reload the extension without closing and reopening the library.
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: issues-unsubscribe@nifi.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
Re: [PR] MINIFICPP-2715 - Use symbols to check api compatibility [nifi-minifi-cpp]
Posted by "martinzink (via GitHub)" <gi...@apache.org>.
martinzink commented on code in PR #2105:
URL: https://github.com/apache/nifi-minifi-cpp/pull/2105#discussion_r3023088938
##########
minifi-api/include/minifi-c/minifi-c.h:
##########
@@ -31,14 +31,20 @@ extern "C" {
#define MINIFI_PRIVATE_STRINGIFY_HELPER(X) #X
#define MINIFI_PRIVATE_STRINGIFY(X) MINIFI_PRIVATE_STRINGIFY_HELPER(X)
-#define MINIFI_API_MAJOR_VERSION 0
-#define MINIFI_API_MINOR_VERSION 1
-#define MINIFI_API_PATCH_VERSION 0
-#define MINIFI_API_VERSION MINIFI_PRIVATE_STRINGIFY(MINIFI_API_MAJOR_VERSION) "." MINIFI_PRIVATE_STRINGIFY(MINIFI_API_MINOR_VERSION) "." MINIFI_PRIVATE_STRINGIFY(MINIFI_API_PATCH_VERSION)
-#define MINIFI_API_VERSION_TAG "MINIFI_API_VERSION=[" MINIFI_API_VERSION "]"
+#define MINIFI_PRIVATE_JOIN_HELPER(X, Y) X ## _ ## Y
+#define MINIFI_PRIVATE_JOIN(X, Y) MINIFI_PRIVATE_JOIN_HELPER(X, Y)
+
#define MINIFI_NULL nullptr
#define MINIFI_OWNED
+#ifndef MINIFI_CREATE_EXTENSION_FN
+#define MINIFI_CREATE_EXTENSION_FN MinifiCreateExtension
+#endif
+
+enum : uint32_t {
Review Comment:
that would introduce cross platform differences, we specificly changed them in https://github.com/apache/nifi-minifi-cpp/pull/2111
i think we can safely target the latest c standard with our brand new API
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: issues-unsubscribe@nifi.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
Re: [PR] MINIFICPP-2715 - Use symbols to check api compatibility [nifi-minifi-cpp]
Posted by "adamdebreceni (via GitHub)" <gi...@apache.org>.
adamdebreceni commented on code in PR #2105:
URL: https://github.com/apache/nifi-minifi-cpp/pull/2105#discussion_r3058425321
##########
Extensions.md:
##########
@@ -17,8 +17,39 @@
To enable all extensions for your platform, you may use -DENABLE_ALL=TRUE OR select the option to "Enable all Extensions" in the bootstrap script. [ReadMe](https://github.com/apache/nifi-minifi-cpp/#bootstrapping)
# Extension internals
-Extensions are dynamic libraries loaded at runtime by the agent. An extension makes its
-capabilities (classes) available to the system through registrars. Registration must happen in source files, not headers.
+Extensions are dynamic libraries loaded at runtime by the agent.
+
+## C extensions
+You can build a shared library depending on the C capabilities of the agent as given in the `minifi-c.h` file.
+For the shared library to be considered a valid extension, it has to have a global symbol with the name `MinifiCApiVersion`
+with its value as a null terminated string (`const char*`) of the macro `MINIFI_API_VERSION` from `minifi-c.h`.
+
+Moreover the actual resource registration (processors/controller services) has to happen during the `MinifiInitExtension` call.
Review Comment:
I think these kinds of questions are better addressed in PR #2150 as there have been some changes touching this part as well
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: issues-unsubscribe@nifi.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
Re: [PR] MINIFICPP-2715 - Use symbols to check api compatibility [nifi-minifi-cpp]
Posted by "martinzink (via GitHub)" <gi...@apache.org>.
martinzink commented on code in PR #2105:
URL: https://github.com/apache/nifi-minifi-cpp/pull/2105#discussion_r3045919897
##########
minifi-api/include/minifi-c/minifi-c.h:
##########
@@ -31,14 +31,20 @@ extern "C" {
#define MINIFI_PRIVATE_STRINGIFY_HELPER(X) #X
#define MINIFI_PRIVATE_STRINGIFY(X) MINIFI_PRIVATE_STRINGIFY_HELPER(X)
-#define MINIFI_API_MAJOR_VERSION 0
-#define MINIFI_API_MINOR_VERSION 1
-#define MINIFI_API_PATCH_VERSION 0
-#define MINIFI_API_VERSION MINIFI_PRIVATE_STRINGIFY(MINIFI_API_MAJOR_VERSION) "." MINIFI_PRIVATE_STRINGIFY(MINIFI_API_MINOR_VERSION) "." MINIFI_PRIVATE_STRINGIFY(MINIFI_API_PATCH_VERSION)
-#define MINIFI_API_VERSION_TAG "MINIFI_API_VERSION=[" MINIFI_API_VERSION "]"
+#define MINIFI_PRIVATE_JOIN_HELPER(X, Y) X ## _ ## Y
+#define MINIFI_PRIVATE_JOIN(X, Y) MINIFI_PRIVATE_JOIN_HELPER(X, Y)
+
#define MINIFI_NULL nullptr
#define MINIFI_OWNED
+#ifndef MINIFI_CREATE_EXTENSION_FN
+#define MINIFI_CREATE_EXTENSION_FN MinifiCreateExtension
+#endif
+
+enum : uint32_t {
Review Comment:
I've created a jira ticket so we can debate and implement a target C version for the api before 1.0 release, but this shouldnt block this PR.
[MINIFICPP-2767](https://issues.apache.org/jira/browse/MINIFICPP-2767)
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: issues-unsubscribe@nifi.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
Re: [PR] MINIFICPP-2715 - Use symbols to check api compatibility [nifi-minifi-cpp]
Posted by "szaszm (via GitHub)" <gi...@apache.org>.
szaszm commented on code in PR #2105:
URL: https://github.com/apache/nifi-minifi-cpp/pull/2105#discussion_r3050589188
##########
extensions/opencv/CMakeLists.txt:
##########
@@ -29,6 +29,7 @@ include(${CMAKE_SOURCE_DIR}/extensions/ExtensionHeader.txt)
file(GLOB SOURCES "*.cpp")
add_minifi_library(minifi-opencv SHARED ${SOURCES})
+set_target_properties(minifi-opencv PROPERTIES HAS_CUSTOM_INITIALIZER TRUE)
Review Comment:
after adding a custom initializer to the aws extension in [645a72c](https://github.com/apache/nifi-minifi-cpp/pull/2151/commits/645a72c1ce05c991b47de3afbd38883be7b1f272), do I need to set this property there too? or is it detected automatically?
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: issues-unsubscribe@nifi.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
Re: [PR] MINIFICPP-2715 - Use symbols to check api compatibility [nifi-minifi-cpp]
Posted by "martinzink (via GitHub)" <gi...@apache.org>.
martinzink commented on code in PR #2105:
URL: https://github.com/apache/nifi-minifi-cpp/pull/2105#discussion_r3050705922
##########
extensions/opencv/CMakeLists.txt:
##########
@@ -29,6 +29,7 @@ include(${CMAKE_SOURCE_DIR}/extensions/ExtensionHeader.txt)
file(GLOB SOURCES "*.cpp")
add_minifi_library(minifi-opencv SHARED ${SOURCES})
+set_target_properties(minifi-opencv PROPERTIES HAS_CUSTOM_INITIALIZER TRUE)
Review Comment:
I think youll gonna need to to set it yes, otherwise the "default" extensions/ExtensionInitializer.cpp is gonna be compiled then its going to fail with odr, but @adamdebreceni might have input on this
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: issues-unsubscribe@nifi.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
Re: [PR] MINIFICPP-2715 - Use symbols to check api compatibility [nifi-minifi-cpp]
Posted by "martinzink (via GitHub)" <gi...@apache.org>.
martinzink closed pull request #2105: MINIFICPP-2715 - Use symbols to check api compatibility
URL: https://github.com/apache/nifi-minifi-cpp/pull/2105
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: issues-unsubscribe@nifi.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
Re: [PR] MINIFICPP-2715 - Use symbols to check api compatibility [nifi-minifi-cpp]
Posted by "martinzink (via GitHub)" <gi...@apache.org>.
martinzink commented on code in PR #2105:
URL: https://github.com/apache/nifi-minifi-cpp/pull/2105#discussion_r3023110221
##########
extensions/opencv/CMakeLists.txt:
##########
@@ -29,6 +29,7 @@ include(${CMAKE_SOURCE_DIR}/extensions/ExtensionHeader.txt)
file(GLOB SOURCES "*.cpp")
add_minifi_library(minifi-opencv SHARED ${SOURCES})
+set_target_properties(minifi-opencv PROPERTIES HAS_CUSTOM_INITIALIZER TRUE)
Review Comment:
The extension either defines its custom initializer or it uses the default one
https://github.com/apache/nifi-minifi-cpp/blob/9fc45a8ca5e45e9a333091f64405c4d5f8298299/extensions/ExtensionInitializer.cpp
controlled by:
https://github.com/apache/nifi-minifi-cpp/blob/controller_c_api/cmake/Extensions.cmake#L30-L32
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: issues-unsubscribe@nifi.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
Re: [PR] MINIFICPP-2715 - Use symbols to check api compatibility [nifi-minifi-cpp]
Posted by "Copilot (via GitHub)" <gi...@apache.org>.
Copilot commented on code in PR #2105:
URL: https://github.com/apache/nifi-minifi-cpp/pull/2105#discussion_r2831891991
##########
cmake/Extensions.cmake:
##########
@@ -22,29 +22,14 @@ define_property(GLOBAL PROPERTY EXTENSION-OPTIONS
set_property(GLOBAL PROPERTY EXTENSION-OPTIONS "")
-set(extension-build-info-file "${CMAKE_CURRENT_BINARY_DIR}/ExtensionBuildInfo.cpp")
-file(GENERATE OUTPUT ${extension-build-info-file}
- CONTENT "\
- #include \"minifi-cpp/utils/Export.h\"\n\
- #ifdef BUILD_ID_VARIABLE_NAME\n\
- EXTENSIONAPI extern const char* const BUILD_ID_VARIABLE_NAME = \"__EXTENSION_BUILD_IDENTIFIER_BEGIN__${BUILD_IDENTIFIER}__EXTENSION_BUILD_IDENTIFIER_END__\";\n\
- #else\n\
- static_assert(false, \"BUILD_ID_VARIABLE_NAME is not defined\");\n\
- #endif\n")
-
-function(get_build_id_variable_name extension-name output)
- string(REPLACE "-" "_" result ${extension-name})
- string(APPEND result "_build_identifier")
- set("${output}" "${result}" PARENT_SCOPE)
-endfunction()
-
macro(register_extension extension-name extension-display-name extension-guard description)
set(${extension-guard} ${extension-name} PARENT_SCOPE)
get_property(extensions GLOBAL PROPERTY EXTENSION-OPTIONS)
set_property(GLOBAL APPEND PROPERTY EXTENSION-OPTIONS ${extension-name})
- get_build_id_variable_name(${extension-name} build-id-variable-name)
- set_source_files_properties(${extension-build-info-file} PROPERTIES GENERATED TRUE)
- target_sources(${extension-name} PRIVATE ${extension-build-info-file})
+ get_target_property(has_custom_initializer ${extension-name} HAS_CUSTOM_INITIALIZER)
+ if (NOT has_custom_initializer)
+ target_sources(${extension-name} PRIVATE ${CMAKE_SOURCE_DIR}/extensions/ExtensionInitializer.cpp)
+ endif()
target_compile_definitions(${extension-name}
PRIVATE "MODULE_NAME=${extension-name}"
PRIVATE "BUILD_ID_VARIABLE_NAME=${build-id-variable-name}")
Review Comment:
The reference to `build-id-variable-name` on line 35 is problematic. This variable is never defined after the removal of the `get_build_id_variable_name` function. Since the BUILD_ID_VARIABLE_NAME compile definition is no longer used in the new symbol-based approach for API compatibility checking, this entire line (line 35) should be removed.
```suggestion
PRIVATE "MODULE_NAME=${extension-name}")
```
##########
Extensions.md:
##########
@@ -49,7 +82,7 @@ extern "C" MinifiExtension* InitExtension(MinifiConfig* /*config*/) {
.processors_count = 0,
.processors_ptr = nullptr
};
- return MinifiCreateExtension(minifi::utils::toStringView(MINIFI_API_VERSION), &ext_create_info);
+ return MinifiCreateCppExtension(&ext_create_info);
Review Comment:
The function call should be `minifi::utils::MinifiCreateCppExtension(&ext_create_info)` to be consistent with the actual implementation. The `MinifiCreateCppExtension` function is in the `minifi::utils` namespace (see extension-framework/include/utils/ExtensionInitUtils.h:33-35), and all other C++ extension loaders use the fully qualified name (see SFTPLoader.cpp:47, PyProcLoader.cpp:52, PythonLibLoader.cpp:117, OpenCVLoader.cpp:45, ExtensionInitializer.cpp:34).
```suggestion
return minifi::utils::MinifiCreateCppExtension(&ext_create_info);
```
##########
libminifi/src/core/extension/Extension.cpp:
##########
@@ -56,10 +57,43 @@ bool Extension::load(bool global) {
if (!handle_) {
logger_->log_error("Failed to load extension '{}' at '{}': {}", name_, library_path_, dlerror());
return false;
- } else {
- logger_->log_trace("Loaded extension '{}' at '{}'", name_, library_path_);
+ }
+ logger_->log_trace("Dlopen succeeded for extension '{}' at '{}'", name_, library_path_);
+ if (findSymbol("MinifiInitCppExtension")) {
+ logger_->log_trace("Loaded cpp extension '{}' at '{}'", name_, library_path_);
return true;
}
+ if (!findSymbol("MinifiInitExtension")) {
+ logger_->log_error("Failed to load c extension '{}' at '{}': No initializer found", name_, library_path_);
+ return false;
+ }
+ auto api_version = reinterpret_cast<const char* const*>(findSymbol("MinifiApiVersion"));
+ if (!api_version) {
+ logger_->log_error("Failed to load c extension '{}' at '{}': No MinifiApiVersion symbol found", name_, library_path_);
+ return false;
+ }
+ utils::SVMatch match;
+ if (!utils::regexSearch(*api_version, match, utils::Regex{R"(^([0-9]+)\.([0-9]+)\.([0-9]+)$)"})) {
+ logger_->log_error("Failed to load c extension '{}' at '{}': Api version is in invalid format: '{}'", name_, library_path_, *api_version);
+ return false;
+ }
+ gsl_Assert(match.size() == 4);
+ version_.major = std::stoi(match[1]);
+ version_.minor = std::stoi(match[2]);
+ version_.patch = std::stoi(match[3]);
+ if (version_.major != MINIFI_API_MAJOR_VERSION) {
+ logger_->log_error("Failed to load c extension '{}' at '{}': Api major version mismatch, application is '{}' while extension is '{}'",
+ name_, library_path_, MINIFI_API_VERSION, *api_version);
+ return false;
+ }
+ if (version_.minor > MINIFI_API_MINOR_VERSION) {
+ logger_->log_error("Failed to load c extension '{}' at '{}': Extension is built for a newer version, application is '{}' while extension is '{}'",
+ name_, library_path_, MINIFI_API_VERSION, *api_version);
+ return false;
+ }
+ logger_->log_debug("Loaded c extension '{}' at '{}': Application version is '{}', extension version is '{}'",
+ name_, library_path_, MINIFI_API_VERSION, *api_version);
+ return true;
Review Comment:
The new symbol-based compatibility checking logic lacks test coverage. The previous test file (ExtensionVerificationTests.cpp) was removed without replacement tests. Consider adding tests that verify:
1. C++ extensions with matching BUILD_IDENTIFIER can be loaded
2. C++ extensions with non-matching BUILD_IDENTIFIER fail to load (symbol resolution failure)
3. C extensions with compatible MinifiApiVersion can be loaded
4. C extensions with incompatible major version are rejected
5. C extensions with newer minor version are rejected
6. C extensions without MinifiApiVersion symbol are rejected
##########
Extensions.md:
##########
@@ -17,8 +17,41 @@
To enable all extensions for your platform, you may use -DENABLE_ALL=TRUE OR select the option to "Enable all Extensions" in the bootstrap script. [ReadMe](https://github.com/apache/nifi-minifi-cpp/#bootstrapping)
# Extension internals
-Extensions are dynamic libraries loaded at runtime by the agent. An extension makes its
-capabilities (classes) available to the system through registrars. Registration must happen in source files, not headers.
+Extensions are dynamic libraries loaded at runtime by the agent.
+
+## C extensions
+You can build a shared library depending on the C capabilities of the agent as given in the `minifi-c.h` file.
+For the shared library to be considered a valid extension, it has to have a global symbol with the name `MinifiCApiVersion`
Review Comment:
The documentation states the symbol should be named `MinifiCApiVersion`, but the actual code in Extension.cpp line 70 looks for `MinifiApiVersion` (without the "C"). The documentation should be corrected to match the implementation.
```suggestion
For the shared library to be considered a valid extension, it has to have a global symbol with the name `MinifiApiVersion`
```
##########
extensions/python/pythonloader/PyProcLoader.cpp:
##########
@@ -49,5 +49,5 @@ extern "C" MinifiExtension* InitExtension(MinifiConfig* config) {
.processors_count = 0,
.processors_ptr = nullptr
};
- return MinifiCreateExtension(minifi::utils::toStringView(MINIFI_API_VERSION), &ext_create_info);
+ return minifi::utils::MinifiCreateCppExtension( &ext_create_info);
Review Comment:
Extra space before the opening parenthesis in the function call. This should be `MinifiCreateCppExtension(&ext_create_info)` without the space, consistent with all other calls to this function in the codebase (see SFTPLoader.cpp:47, PythonLibLoader.cpp:117, OpenCVLoader.cpp:45, ExtensionInitializer.cpp:34).
```suggestion
return minifi::utils::MinifiCreateCppExtension(&ext_create_info);
```
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: issues-unsubscribe@nifi.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
Re: [PR] MINIFICPP-2715 - Use symbols to check api compatibility [nifi-minifi-cpp]
Posted by "szaszm (via GitHub)" <gi...@apache.org>.
szaszm commented on code in PR #2105:
URL: https://github.com/apache/nifi-minifi-cpp/pull/2105#discussion_r3009649601
##########
extensions/opencv/CMakeLists.txt:
##########
@@ -29,6 +29,7 @@ include(${CMAKE_SOURCE_DIR}/extensions/ExtensionHeader.txt)
file(GLOB SOURCES "*.cpp")
add_minifi_library(minifi-opencv SHARED ${SOURCES})
+set_target_properties(minifi-opencv PROPERTIES HAS_CUSTOM_INITIALIZER TRUE)
Review Comment:
what does this mean?
##########
minifi-api/include/minifi-c/minifi-c.h:
##########
@@ -31,14 +31,20 @@ extern "C" {
#define MINIFI_PRIVATE_STRINGIFY_HELPER(X) #X
#define MINIFI_PRIVATE_STRINGIFY(X) MINIFI_PRIVATE_STRINGIFY_HELPER(X)
-#define MINIFI_API_MAJOR_VERSION 0
-#define MINIFI_API_MINOR_VERSION 1
-#define MINIFI_API_PATCH_VERSION 0
-#define MINIFI_API_VERSION MINIFI_PRIVATE_STRINGIFY(MINIFI_API_MAJOR_VERSION) "." MINIFI_PRIVATE_STRINGIFY(MINIFI_API_MINOR_VERSION) "." MINIFI_PRIVATE_STRINGIFY(MINIFI_API_PATCH_VERSION)
-#define MINIFI_API_VERSION_TAG "MINIFI_API_VERSION=[" MINIFI_API_VERSION "]"
+#define MINIFI_PRIVATE_JOIN_HELPER(X, Y) X ## _ ## Y
+#define MINIFI_PRIVATE_JOIN(X, Y) MINIFI_PRIVATE_JOIN_HELPER(X, Y)
+
#define MINIFI_NULL nullptr
#define MINIFI_OWNED
+#ifndef MINIFI_CREATE_EXTENSION_FN
+#define MINIFI_CREATE_EXTENSION_FN MinifiCreateExtension
+#endif
+
+enum : uint32_t {
Review Comment:
The underlying type syntax is a C23 addition, I'd rather avoid that and use the default int.
```suggestion
enum {
```
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: issues-unsubscribe@nifi.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org