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 b240279dc43ee0bca72b419b330270c0b31c2c0a
Author: Adam Debreceni <[email protected]>
AuthorDate: Thu Feb 12 14:45:15 2026 +0100

    MINIFICPP-2715 - Move version information to MinifiCreateExtension
---
 extensions/ExtensionInitializer.cpp                |  2 +-
 .../llamacpp/processors/ExtensionInitializer.cpp   |  2 +-
 extensions/opencv/OpenCVLoader.cpp                 |  2 +-
 .../python/pythonlibloader/PythonLibLoader.cpp     |  2 +-
 extensions/python/pythonloader/PyProcLoader.cpp    |  2 +-
 extensions/sftp/SFTPLoader.cpp                     |  2 +-
 libminifi/src/ApiVersions.cpp                      | 34 -------------
 libminifi/src/minifi-c.cpp                         | 55 +++++++++++++---------
 minifi-api/CMakeLists.txt                          |  2 +-
 minifi-api/include/minifi-c/minifi-c.h             | 20 ++++----
 minifi-api/minifi-c-api.def                        |  3 +-
 11 files changed, 52 insertions(+), 74 deletions(-)

diff --git a/extensions/ExtensionInitializer.cpp 
b/extensions/ExtensionInitializer.cpp
index 4044e15c2..3caaaeed0 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_API_VERSION, &ext_create_info);
+  return 
MinifiCreateExtension(minifi::utils::toStringView(MINIFI_API_VERSION), 
&ext_create_info);
 }
diff --git a/extensions/llamacpp/processors/ExtensionInitializer.cpp 
b/extensions/llamacpp/processors/ExtensionInitializer.cpp
index 18f5ff58e..b90b8b133 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_VERSION, &ext_create_info);
+    extension = 
MinifiCreateExtension(minifi::api::utils::toStringView(MINIFI_API_VERSION), 
&ext_create_info);
   });
   return extension;
 }
diff --git a/extensions/opencv/OpenCVLoader.cpp 
b/extensions/opencv/OpenCVLoader.cpp
index 83e75bdbd..3f91395c4 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_API_VERSION, &ext_create_info);
+  return 
MinifiCreateExtension(minifi::utils::toStringView(MINIFI_API_VERSION), 
&ext_create_info);
 }
diff --git a/extensions/python/pythonlibloader/PythonLibLoader.cpp 
b/extensions/python/pythonlibloader/PythonLibLoader.cpp
index 522c43633..cdf0356b7 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_API_VERSION, &ext_create_info);
+  return 
MinifiCreateExtension(minifi::utils::toStringView(MINIFI_API_VERSION), 
&ext_create_info);
 }
diff --git a/extensions/python/pythonloader/PyProcLoader.cpp 
b/extensions/python/pythonloader/PyProcLoader.cpp
index f283847ff..55ad4ebef 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_API_VERSION, &ext_create_info);
+  return 
MinifiCreateExtension(minifi::utils::toStringView(MINIFI_API_VERSION), 
&ext_create_info);
 }
diff --git a/extensions/sftp/SFTPLoader.cpp b/extensions/sftp/SFTPLoader.cpp
index 3cf12aedd..bb23e9998 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_API_VERSION, &ext_create_info);
+  return 
MinifiCreateExtension(minifi::utils::toStringView(MINIFI_API_VERSION), 
&ext_create_info);
 }
diff --git a/libminifi/src/ApiVersions.cpp b/libminifi/src/ApiVersions.cpp
deleted file mode 100644
index 76364c0f0..000000000
--- a/libminifi/src/ApiVersions.cpp
+++ /dev/null
@@ -1,34 +0,0 @@
-/**
-* 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.
- */
-
-#include "minifi-c/minifi-c.h"
-#include "minifi-cpp/utils/Export.h"
-
-extern "C" {
-
-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)  \
-    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)
-
-}  // extern "C"
diff --git a/libminifi/src/minifi-c.cpp b/libminifi/src/minifi-c.cpp
index 2abff81d0..0e4144c33 100644
--- a/libminifi/src/minifi-c.cpp
+++ b/libminifi/src/minifi-c.cpp
@@ -146,6 +146,30 @@ class CProcessorFactory : public 
minifi::core::ProcessorFactory {
   minifi::utils::CProcessorClassDescription class_description_;
 };
 
+MinifiExtension* MinifiCreateExtensionImpl(MinifiStringView /*api_version*/, 
const MinifiExtensionCreateInfo* extension_create_info) {
+  gsl_Assert(extension_create_info);
+  auto extension_name = toString(extension_create_info->name);
+  minifi::BundleIdentifier bundle{
+    .name = extension_name,
+    .version = toString(extension_create_info->version)
+  };
+  auto& bundle_components = 
minifi::ClassDescriptionRegistry::getMutableClassDescriptions()[bundle];
+  for (size_t proc_idx = 0; proc_idx < 
extension_create_info->processors_count; ++proc_idx) {
+    
minifi::utils::useCProcessorClassDescription(extension_create_info->processors_ptr[proc_idx],
 [&] (const auto& description, const auto& c_class_description) {
+      
minifi::core::ClassLoader::getDefaultClassLoader().getClassLoader(extension_name).registerClass(
+        c_class_description.name,
+        std::make_unique<CProcessorFactory>(extension_name, 
toString(extension_create_info->processors_ptr[proc_idx].full_name), 
c_class_description));
+      bundle_components.processors.emplace_back(description);
+    });
+  }
+  return reinterpret_cast<MinifiExtension*>(new 
org::apache::nifi::minifi::core::extension::Extension::Info{
+    .name = toString(extension_create_info->name),
+    .version = toString(extension_create_info->version),
+    .deinit = extension_create_info->deinit,
+    .user_data = extension_create_info->user_data
+  });
+}
+
 }  // namespace
 
 namespace org::apache::nifi::minifi::utils {
@@ -225,30 +249,17 @@ void useCProcessorClassDescription(const 
MinifiProcessorClassDefinition& class_d
 
 extern "C" {
 
-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{
-    .name = extension_name,
-    .version = toString(extension_create_info->version)
-  };
-  auto& bundle_components = 
minifi::ClassDescriptionRegistry::getMutableClassDescriptions()[bundle];
-  for (size_t proc_idx = 0; proc_idx < 
extension_create_info->processors_count; ++proc_idx) {
-    
minifi::utils::useCProcessorClassDescription(extension_create_info->processors_ptr[proc_idx],
 [&] (const auto& description, const auto& c_class_description) {
-      
minifi::core::ClassLoader::getDefaultClassLoader().getClassLoader(extension_name).registerClass(
-        c_class_description.name,
-        std::make_unique<CProcessorFactory>(extension_name, 
toString(extension_create_info->processors_ptr[proc_idx].full_name), 
c_class_description));
-      bundle_components.processors.emplace_back(description);
-    });
-  }
-  return reinterpret_cast<MinifiExtension*>(new 
org::apache::nifi::minifi::core::extension::Extension::Info{
-    .name = toString(extension_create_info->name),
-    .version = toString(extension_create_info->version),
-    .deinit = extension_create_info->deinit,
-    .user_data = extension_create_info->user_data
-  });
+MinifiExtension* MINIFI_CREATE_EXTENSION_FN(MinifiStringView api_version, 
const MinifiExtensionCreateInfo* extension_create_info) {
+  return MinifiCreateExtensionImpl(api_version, extension_create_info);
 }
 
+#define REGISTER_C_API_VERSION(major, minor)  \
+  MinifiExtension* MINIFI_PRIVATE_JOIN(MinifiCreateExtension, 
MINIFI_PRIVATE_JOIN(major, minor))(MinifiStringView api_version, const 
MinifiExtensionCreateInfo* extension_create_info) {  \
+    return MinifiCreateExtensionImpl(api_version, extension_create_info);  \
+  }
+
+REGISTER_C_API_VERSION(0, 1)
+
 MinifiStatus MinifiProcessContextGetProperty(MinifiProcessContext* context, 
MinifiStringView property_name, MinifiFlowFile* flowfile,
     void (*result_cb)(void* user_ctx, MinifiStringView result), void* 
user_ctx) {
   gsl_Assert(context != MINIFI_NULL);
diff --git a/minifi-api/CMakeLists.txt b/minifi-api/CMakeLists.txt
index dfef95bc7..05f78fc99 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_FN=MinifiCppApiVersion_${BUILD_IDENTIFIER})
+target_compile_definitions(minifi-api INTERFACE 
MINIFI_CREATE_EXTENSION_FN=MinifiCreateExtension_${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 d1f45ea28..d246b773b 100644
--- a/minifi-api/include/minifi-c/minifi-c.h
+++ b/minifi-api/include/minifi-c/minifi-c.h
@@ -34,14 +34,14 @@ extern "C" {
 #define MINIFI_PRIVATE_JOIN_HELPER(X, Y) X ## _ ## Y
 #define MINIFI_PRIVATE_JOIN(X, Y) MINIFI_PRIVATE_JOIN_HELPER(X, Y)
 
-#define MINIFI_C_API_MAJOR_VERSION 0
-#define MINIFI_C_API_MINOR_VERSION 1
-#define MINIFI_C_API_PATCH_VERSION 0
+#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)
 
-#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))
+#ifndef MINIFI_CREATE_EXTENSION_FN
+#define MINIFI_CREATE_EXTENSION_FN MINIFI_PRIVATE_JOIN(MinifiCreateExtension, 
MINIFI_PRIVATE_JOIN(MINIFI_API_MAJOR_VERSION, MINIFI_API_MINOR_VERSION))
 #endif
-#define MINIFI_API_VERSION MINIFI_API_VERSION_FN()
 
 #define MINIFI_NULL nullptr
 #define MINIFI_OWNED
@@ -189,12 +189,10 @@ 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(const MinifiApiVersion* api_version, 
const MinifiExtensionCreateInfo*);
+MinifiExtension* MINIFI_CREATE_EXTENSION_FN(MinifiStringView api_version, 
const MinifiExtensionCreateInfo* create_info);
 
 MINIFI_OWNED MinifiPublishedMetrics* MinifiPublishedMetricsCreate(size_t 
count, const MinifiStringView* metric_names, const double* metric_values);
 
@@ -234,4 +232,8 @@ void MinifiFlowFileGetAttributes(MinifiProcessSession* 
session, MinifiFlowFile*
 }  // extern "C"
 #endif  // __cplusplus
 
+static inline MinifiExtension* MinifiCreateExtension(MinifiStringView 
api_version, const MinifiExtensionCreateInfo* create_info) {
+  return MINIFI_CREATE_EXTENSION_FN(api_version, create_info);
+}
+
 #endif  // MINIFI_API_INCLUDE_MINIFI_C_MINIFI_C_H_
diff --git a/minifi-api/minifi-c-api.def b/minifi-api/minifi-c-api.def
index 1e9f66ecd..a664bdd2d 100644
--- a/minifi-api/minifi-c-api.def
+++ b/minifi-api/minifi-c-api.def
@@ -1,6 +1,6 @@
 LIBRARY core-minifi.dll
 EXPORTS
-  MinifiCreateExtension
+  MinifiCreateExtension_0_1
   MinifiPublishedMetricsCreate
   MinifiProcessContextGetProperty
   MinifiProcessContextHasNonEmptyProperty
@@ -22,4 +22,3 @@ EXPORTS
   MinifiFlowFileSetAttribute
   MinifiFlowFileGetAttribute
   MinifiFlowFileGetAttributes
-  MinifiCApiVersion_0_1

Reply via email to