This is an automated email from the ASF dual-hosted git repository. martinzink pushed a commit to branch controller_c_api_requirements in repository https://gitbox.apache.org/repos/asf/nifi-minifi-cpp.git
commit 04c8c2fae3e049dc4b28eb1d0f274e4970ce048f Author: Adam Debreceni <[email protected]> AuthorDate: Thu Feb 12 11:17:30 2026 +0100 MINIFICPP-2715 - Windows fix --- extensions/ExtensionInitializer.cpp | 2 +- extensions/llamacpp/processors/ExtensionInitializer.cpp | 2 +- extensions/opencv/OpenCVLoader.cpp | 2 +- extensions/python/pythonlibloader/PythonLibLoader.cpp | 2 +- extensions/python/pythonloader/PyProcLoader.cpp | 2 +- extensions/sftp/SFTPLoader.cpp | 2 +- libminifi/src/ApiVersions.cpp | 11 +++++++---- libminifi/src/minifi-c.cpp | 2 +- minifi-api/CMakeLists.txt | 2 +- minifi-api/include/minifi-c/minifi-c.h | 11 +++++++---- minifi-api/minifi-c-api.def | 2 +- 11 files changed, 23 insertions(+), 17 deletions(-) diff --git a/extensions/ExtensionInitializer.cpp b/extensions/ExtensionInitializer.cpp index 3caaaeed0..4044e15c2 100644 --- a/extensions/ExtensionInitializer.cpp +++ b/extensions/ExtensionInitializer.cpp @@ -31,5 +31,5 @@ extern "C" MinifiExtension* MinifiInitExtension(MinifiConfig* /*config*/) { .processors_count = 0, .processors_ptr = nullptr }; - return MinifiCreateExtension(minifi::utils::toStringView(MINIFI_API_VERSION), &ext_create_info); + return MinifiCreateExtension(MINIFI_API_VERSION, &ext_create_info); } diff --git a/extensions/llamacpp/processors/ExtensionInitializer.cpp b/extensions/llamacpp/processors/ExtensionInitializer.cpp index b90b8b133..18f5ff58e 100644 --- a/extensions/llamacpp/processors/ExtensionInitializer.cpp +++ b/extensions/llamacpp/processors/ExtensionInitializer.cpp @@ -35,7 +35,7 @@ extern "C" MinifiExtension* MinifiInitExtension(MinifiConfig* /*config*/) { .processors_count = 1, .processors_ptr = &description, }; - extension = MinifiCreateExtension(minifi::api::utils::toStringView(MINIFI_API_VERSION), &ext_create_info); + extension = MinifiCreateExtension(MINIFI_API_VERSION, &ext_create_info); }); return extension; } diff --git a/extensions/opencv/OpenCVLoader.cpp b/extensions/opencv/OpenCVLoader.cpp index 3f91395c4..83e75bdbd 100644 --- a/extensions/opencv/OpenCVLoader.cpp +++ b/extensions/opencv/OpenCVLoader.cpp @@ -42,5 +42,5 @@ extern "C" MinifiExtension* MinifiInitExtension(MinifiConfig* /*config*/) { .processors_count = 0, .processors_ptr = nullptr }; - return MinifiCreateExtension(minifi::utils::toStringView(MINIFI_API_VERSION), &ext_create_info); + return MinifiCreateExtension(MINIFI_API_VERSION, &ext_create_info); } diff --git a/extensions/python/pythonlibloader/PythonLibLoader.cpp b/extensions/python/pythonlibloader/PythonLibLoader.cpp index cdf0356b7..522c43633 100644 --- a/extensions/python/pythonlibloader/PythonLibLoader.cpp +++ b/extensions/python/pythonlibloader/PythonLibLoader.cpp @@ -114,5 +114,5 @@ extern "C" MinifiExtension* MinifiInitExtension(MinifiConfig* config) { .processors_count = 0, .processors_ptr = nullptr }; - return MinifiCreateExtension(minifi::utils::toStringView(MINIFI_API_VERSION), &ext_create_info); + return MinifiCreateExtension(MINIFI_API_VERSION, &ext_create_info); } diff --git a/extensions/python/pythonloader/PyProcLoader.cpp b/extensions/python/pythonloader/PyProcLoader.cpp index 55ad4ebef..f283847ff 100644 --- a/extensions/python/pythonloader/PyProcLoader.cpp +++ b/extensions/python/pythonloader/PyProcLoader.cpp @@ -49,5 +49,5 @@ extern "C" MinifiExtension* MinifiInitExtension(MinifiConfig* config) { .processors_count = 0, .processors_ptr = nullptr }; - return MinifiCreateExtension(minifi::utils::toStringView(MINIFI_API_VERSION), &ext_create_info); + return MinifiCreateExtension(MINIFI_API_VERSION, &ext_create_info); } diff --git a/extensions/sftp/SFTPLoader.cpp b/extensions/sftp/SFTPLoader.cpp index bb23e9998..3cf12aedd 100644 --- a/extensions/sftp/SFTPLoader.cpp +++ b/extensions/sftp/SFTPLoader.cpp @@ -44,5 +44,5 @@ extern "C" MinifiExtension* MinifiInitExtension(MinifiConfig* /*config*/) { .processors_count = 0, .processors_ptr = nullptr }; - return MinifiCreateExtension(minifi::utils::toStringView(MINIFI_API_VERSION), &ext_create_info); + return MinifiCreateExtension(MINIFI_API_VERSION, &ext_create_info); } diff --git a/libminifi/src/ApiVersions.cpp b/libminifi/src/ApiVersions.cpp index 5bff5c020..76364c0f0 100644 --- a/libminifi/src/ApiVersions.cpp +++ b/libminifi/src/ApiVersions.cpp @@ -20,11 +20,14 @@ extern "C" { -MINIFIAPI extern const char* const MINIFI_API_VERSION = MINIFI_PRIVATE_STRINGIFY(MINIFI_API_VERSION); +const MinifiApiVersion* MINIFI_API_VERSION_FN() { + return reinterpret_cast<const MinifiApiVersion*>(MINIFI_PRIVATE_STRINGIFY(MINIFI_API_VERSION_FN)); +} -#define REGISTER_C_API_VERSION(major, minor) \ - MINIFIAPI extern const char* const MINIFI_PRIVATE_JOIN(MINIFI_C_API_VERSION, MINIFI_PRIVATE_JOIN(major, minor)) = \ - MINIFI_PRIVATE_STRINGIFY(MINIFI_C_API_MAJOR_VERSION) "." MINIFI_PRIVATE_STRINGIFY(MINIFI_C_API_MINOR_VERSION) "." MINIFI_PRIVATE_STRINGIFY(MINIFI_C_API_PATCH_VERSION); +#define REGISTER_C_API_VERSION(major, minor) \ + const MinifiApiVersion* MINIFI_PRIVATE_JOIN(MinifiCApiVersion, MINIFI_PRIVATE_JOIN(major, minor))() { \ + return reinterpret_cast<const MinifiApiVersion*>(MINIFI_PRIVATE_STRINGIFY(MINIFI_C_API_MAJOR_VERSION) "." MINIFI_PRIVATE_STRINGIFY(MINIFI_C_API_MINOR_VERSION) "." MINIFI_PRIVATE_STRINGIFY(MINIFI_C_API_PATCH_VERSION)); \ + } REGISTER_C_API_VERSION(0, 1) diff --git a/libminifi/src/minifi-c.cpp b/libminifi/src/minifi-c.cpp index ebceb9f02..2abff81d0 100644 --- a/libminifi/src/minifi-c.cpp +++ b/libminifi/src/minifi-c.cpp @@ -225,7 +225,7 @@ void useCProcessorClassDescription(const MinifiProcessorClassDefinition& class_d extern "C" { -MinifiExtension* MinifiCreateExtension(MinifiStringView /*api_version*/, const MinifiExtensionCreateInfo* extension_create_info) { +MinifiExtension* MinifiCreateExtension(const MinifiApiVersion* /*api_version*/, const MinifiExtensionCreateInfo* extension_create_info) { gsl_Assert(extension_create_info); auto extension_name = toString(extension_create_info->name); minifi::BundleIdentifier bundle{ diff --git a/minifi-api/CMakeLists.txt b/minifi-api/CMakeLists.txt index 7a758dbf8..dfef95bc7 100644 --- a/minifi-api/CMakeLists.txt +++ b/minifi-api/CMakeLists.txt @@ -6,7 +6,7 @@ target_compile_definitions(minifi-api-common INTERFACE MINIFI_VERSION_STR="${MIN add_library(minifi-api INTERFACE) target_include_directories(minifi-api INTERFACE include) target_link_libraries(minifi-api INTERFACE minifi-api-common) -target_compile_definitions(minifi-api INTERFACE MINIFI_API_VERSION=MINIFI_CPP_API_VERSION_${BUILD_IDENTIFIER}) +target_compile_definitions(minifi-api INTERFACE MINIFI_API_VERSION_FN=MinifiCppApiVersion_${BUILD_IDENTIFIER}) add_library(minifi-c-api INTERFACE) target_include_directories(minifi-c-api INTERFACE include/minifi-c) diff --git a/minifi-api/include/minifi-c/minifi-c.h b/minifi-api/include/minifi-c/minifi-c.h index afccd00c8..d1f45ea28 100644 --- a/minifi-api/include/minifi-c/minifi-c.h +++ b/minifi-api/include/minifi-c/minifi-c.h @@ -38,10 +38,10 @@ extern "C" { #define MINIFI_C_API_MINOR_VERSION 1 #define MINIFI_C_API_PATCH_VERSION 0 -#ifndef MINIFI_API_VERSION -#define MINIFI_API_VERSION MINIFI_PRIVATE_JOIN(MINIFI_C_API_VERSION, MINIFI_PRIVATE_JOIN(MINIFI_C_API_MAJOR_VERSION, MINIFI_C_API_MINOR_VERSION)) +#ifndef MINIFI_API_VERSION_FN +#define MINIFI_API_VERSION_FN MINIFI_PRIVATE_JOIN(MinifiCApiVersion, MINIFI_PRIVATE_JOIN(MINIFI_C_API_MAJOR_VERSION, MINIFI_C_API_MINOR_VERSION)) #endif -extern const char* const MINIFI_API_VERSION; +#define MINIFI_API_VERSION MINIFI_API_VERSION_FN() #define MINIFI_NULL nullptr #define MINIFI_OWNED @@ -94,6 +94,7 @@ typedef struct MinifiOutputStream MinifiOutputStream; typedef struct MinifiConfig MinifiConfig; typedef struct MinifiExtension MinifiExtension; typedef struct MinifiPublishedMetrics MinifiPublishedMetrics; +typedef struct MinifiApiVersion MinifiApiVersion; typedef enum MinifiStatus : uint32_t { MINIFI_STATUS_SUCCESS = 0, @@ -188,10 +189,12 @@ typedef struct MinifiExtensionCreateInfo { const MinifiProcessorClassDefinition* processors_ptr; } MinifiExtensionCreateInfo; +const MinifiApiVersion* MINIFI_API_VERSION_FN(); + // api_version is used to provide backwards compatible changes to the MinifiExtensionCreateInfo structure, // e.g. if MinifiExtensionCreateInfo gets a new field in version 1.2.0, extensions built with api 1.1.0 do not // have to be rebuilt -MinifiExtension* MinifiCreateExtension(MinifiStringView api_version, const MinifiExtensionCreateInfo*); +MinifiExtension* MinifiCreateExtension(const MinifiApiVersion* api_version, const MinifiExtensionCreateInfo*); MINIFI_OWNED MinifiPublishedMetrics* MinifiPublishedMetricsCreate(size_t count, const MinifiStringView* metric_names, const double* metric_values); diff --git a/minifi-api/minifi-c-api.def b/minifi-api/minifi-c-api.def index ee763264d..1e9f66ecd 100644 --- a/minifi-api/minifi-c-api.def +++ b/minifi-api/minifi-c-api.def @@ -22,4 +22,4 @@ EXPORTS MinifiFlowFileSetAttribute MinifiFlowFileGetAttribute MinifiFlowFileGetAttributes - MINIFI_C_API_VERSION_0_1 + MinifiCApiVersion_0_1
