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

paleolimbot pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/arrow-nanoarrow.git


The following commit(s) were added to refs/heads/main by this push:
     new 6d424eb  fix: make sure bundled nanoarrow is also valid C++ (#112)
6d424eb is described below

commit 6d424eb27b2ea7729450a2a92b4ce68ad31ae1da
Author: Dewey Dunnington <[email protected]>
AuthorDate: Tue Feb 21 10:58:52 2023 -0400

    fix: make sure bundled nanoarrow is also valid C++ (#112)
    
    Apparently it's difficult to pass different flags to C and C++ files in
    a Python extension. The C library was almost valid C++ anyway and
    because there are quite a few static inline functions, it's probably a
    good idea to make sure that the project compiles under a C++ compiler as
    well (since the nanoarrow.h header will be compiled with C++ if included
    in a C++ project).
---
 .github/workflows/build-and-test.yaml | 32 ++++--------------
 CMakeLists.txt                        |  9 +++--
 src/nanoarrow/array_stream.c          | 64 +++++++++++++++++------------------
 src/nanoarrow/utils.c                 |  2 +-
 4 files changed, 46 insertions(+), 61 deletions(-)

diff --git a/.github/workflows/build-and-test.yaml 
b/.github/workflows/build-and-test.yaml
index e6b28e2..8f6b423 100644
--- a/.github/workflows/build-and-test.yaml
+++ b/.github/workflows/build-and-test.yaml
@@ -40,9 +40,10 @@ jobs:
       fail-fast: false
       matrix:
         config:
-          - {label: default-build}
-          - {label: namespaced-build}
-          - {label: bundled-build}
+          - {label: default-build, cmake_args: "-DNANOARROW_CODE_COVERAGE=ON"}
+          - {label: namespaced-build, cmake_args: 
"-DNANOARROW_NAMESPACE=SomeUserNamespace"}
+          - {label: bundled-build, cmake_args: "-DNANOARROW_BUNDLE=ON"}
+          - {label: bundled-cpp-build, cmake_args: "-DNANOARROW_BUNDLE=ON 
-DNANOARROW_BUNDLE_AS_CPP=ON"}
 
     steps:
       - name: Checkout repo
@@ -60,34 +61,13 @@ jobs:
           sudo apt-get install -y -V libarrow-dev
           rm apache-arrow-apt-*.deb
 
-      - name: Build nanoarrow (default)
-        if: matrix.config.label == 'default-build'
-        run: |
-          export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:`pwd`/dist/lib
-          sudo ldconfig
-          mkdir build
-          cd build
-          cmake .. -DCMAKE_BUILD_TYPE=Debug -DNANOARROW_CODE_COVERAGE=ON 
-DNANOARROW_BUILD_TESTS=ON
-          cmake --build .
-
-      - name: Build nanoarrow (namespaced)
-        if: matrix.config.label == 'namespaced-build'
-        run: |
-          export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:`pwd`/dist/lib
-          sudo ldconfig
-          mkdir build
-          cd build
-          cmake .. -DCMAKE_BUILD_TYPE=Debug -DNANOARROW_CODE_COVERAGE=ON 
-DNANOARROW_BUILD_TESTS=ON -DNANOARROW_NAMESPACE=SomeUserNamespace
-          cmake --build .
-
-      - name: Build nanoarrow (bundled)
-        if: matrix.config.label == 'bundled-build'
+      - name: Build nanoarrow
         run: |
           export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:`pwd`/dist/lib
           sudo ldconfig
           mkdir build
           cd build
-          cmake .. -DCMAKE_BUILD_TYPE=Debug -DNANOARROW_CODE_COVERAGE=ON 
-DNANOARROW_BUILD_TESTS=ON -DNANOARROW_BUNDLE=ON
+          cmake .. -DCMAKE_BUILD_TYPE=Debug -DNANOARROW_BUILD_TESTS=ON ${{ 
matrix.config.cmake_args }}
           cmake --build .
 
       - name: Check for non-namespaced symbols in namespaced build
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 5edf508..3b17205 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -28,6 +28,7 @@ set(NANOARROW_VERSION_PATCH "${nanoarrow_VERSION_PATCH}")
 
 option(NANOARROW_BUILD_TESTS "Build tests" OFF)
 option(NANOARROW_BUNDLE "Create bundled nanoarrow.h and nanoarrow.c" OFF)
+option(NANOARROW_BUNDLE_AS_CPP "Bundle nanoarrow source file as nanoarrow.cc" 
OFF)
 option(NANOARROW_NAMESPACE "A prefix for exported symbols" OFF)
 
 if (NANOARROW_NAMESPACE)
@@ -68,7 +69,11 @@ if(NANOARROW_BUNDLE)
     file(WRITE ${NANOARROW_HPP_TEMP} "${SRC_FILE_CONTENTS}")
 
     # Combine all source files into amalgamation/nanoarrow.c in the build 
directory
-    set(NANOARROW_C_TEMP 
${CMAKE_BINARY_DIR}/amalgamation/nanoarrow/nanoarrow.c)
+    if(NANOARROW_BUNDLE_AS_CPP)
+        set(NANOARROW_C_TEMP 
${CMAKE_BINARY_DIR}/amalgamation/nanoarrow/nanoarrow.cc)
+    else()
+        set(NANOARROW_C_TEMP 
${CMAKE_BINARY_DIR}/amalgamation/nanoarrow/nanoarrow.c)
+    endif()
     file(READ src/nanoarrow/utils.c SRC_FILE_CONTENTS)
     file(WRITE ${NANOARROW_C_TEMP} "${SRC_FILE_CONTENTS}")
     file(READ src/nanoarrow/schema.c SRC_FILE_CONTENTS)
@@ -81,7 +86,7 @@ if(NANOARROW_BUNDLE)
     # Add a library that the tests can link against (but don't install it)
     if(NANOARROW_BUILD_TESTS)
         include_directories(${CMAKE_BINARY_DIR}/amalgamation)
-        add_library(nanoarrow 
${CMAKE_BINARY_DIR}/amalgamation/nanoarrow/nanoarrow.c)
+        add_library(nanoarrow ${NANOARROW_C_TEMP})
     endif()
 
     # Install the amalgamated header and source
diff --git a/src/nanoarrow/array_stream.c b/src/nanoarrow/array_stream.c
index 07917af..d077f91 100644
--- a/src/nanoarrow/array_stream.c
+++ b/src/nanoarrow/array_stream.c
@@ -32,9 +32,9 @@ static int ArrowBasicArrayStreamGetSchema(struct 
ArrowArrayStream* array_stream,
     return EINVAL;
   }
 
-  struct BasicArrayStreamPrivate* private =
+  struct BasicArrayStreamPrivate* private_data =
       (struct BasicArrayStreamPrivate*)array_stream->private_data;
-  return ArrowSchemaDeepCopy(&private->schema, schema);
+  return ArrowSchemaDeepCopy(&private_data->schema, schema);
 }
 
 static int ArrowBasicArrayStreamGetNext(struct ArrowArrayStream* array_stream,
@@ -43,15 +43,15 @@ static int ArrowBasicArrayStreamGetNext(struct 
ArrowArrayStream* array_stream,
     return EINVAL;
   }
 
-  struct BasicArrayStreamPrivate* private =
+  struct BasicArrayStreamPrivate* private_data =
       (struct BasicArrayStreamPrivate*)array_stream->private_data;
 
-  if (private->arrays_i == private->n_arrays) {
+  if (private_data->arrays_i == private_data->n_arrays) {
     array->release = NULL;
     return NANOARROW_OK;
   }
 
-  ArrowArrayMove(&private->arrays[private->arrays_i++], array);
+  ArrowArrayMove(&private_data->arrays[private_data->arrays_i++], array);
   return NANOARROW_OK;
 }
 
@@ -65,81 +65,81 @@ static void ArrowBasicArrayStreamRelease(struct 
ArrowArrayStream* array_stream)
     return;
   }
 
-  struct BasicArrayStreamPrivate* private =
+  struct BasicArrayStreamPrivate* private_data =
       (struct BasicArrayStreamPrivate*)array_stream->private_data;
 
-  if (private->schema.release != NULL) {
-    private->schema.release(&private->schema);
+  if (private_data->schema.release != NULL) {
+    private_data->schema.release(&private_data->schema);
   }
 
-  for (int64_t i = 0; i < private->n_arrays; i++) {
-    if (private->arrays[i].release != NULL) {
-      private->arrays[i].release(&private->arrays[i]);
+  for (int64_t i = 0; i < private_data->n_arrays; i++) {
+    if (private_data->arrays[i].release != NULL) {
+      private_data->arrays[i].release(&private_data->arrays[i]);
     }
   }
 
-  if (private->arrays != NULL) {
-    ArrowFree(private->arrays);
+  if (private_data->arrays != NULL) {
+    ArrowFree(private_data->arrays);
   }
 
-  ArrowFree(private);
+  ArrowFree(private_data);
   array_stream->release = NULL;
 }
 
 ArrowErrorCode ArrowBasicArrayStreamInit(struct ArrowArrayStream* array_stream,
                                          struct ArrowSchema* schema, int64_t 
n_arrays) {
-  struct BasicArrayStreamPrivate* private = (struct 
BasicArrayStreamPrivate*)ArrowMalloc(
+  struct BasicArrayStreamPrivate* private_data = (struct 
BasicArrayStreamPrivate*)ArrowMalloc(
       sizeof(struct BasicArrayStreamPrivate));
-  if (private == NULL) {
+  if (private_data == NULL) {
     return ENOMEM;
   }
 
-  ArrowSchemaMove(schema, &private->schema);
+  ArrowSchemaMove(schema, &private_data->schema);
 
-  private->n_arrays = n_arrays;
-  private->arrays = NULL;
-  private->arrays_i = 0;
+  private_data->n_arrays = n_arrays;
+  private_data->arrays = NULL;
+  private_data->arrays_i = 0;
 
   if (n_arrays > 0) {
-    private->arrays =
+    private_data->arrays =
         (struct ArrowArray*)ArrowMalloc(n_arrays * sizeof(struct ArrowArray));
-    if (private->arrays == NULL) {
+    if (private_data->arrays == NULL) {
       ArrowBasicArrayStreamRelease(array_stream);
       return ENOMEM;
     }
   }
 
-  for (int64_t i = 0; i < private->n_arrays; i++) {
-    private->arrays[i].release = NULL;
+  for (int64_t i = 0; i < private_data->n_arrays; i++) {
+    private_data->arrays[i].release = NULL;
   }
 
   array_stream->get_schema = &ArrowBasicArrayStreamGetSchema;
   array_stream->get_next = &ArrowBasicArrayStreamGetNext;
   array_stream->get_last_error = ArrowBasicArrayStreamGetLastError;
   array_stream->release = ArrowBasicArrayStreamRelease;
-  array_stream->private_data = private;
+  array_stream->private_data = private_data;
   return NANOARROW_OK;
 }
 
 void ArrowBasicArrayStreamSetArray(struct ArrowArrayStream* array_stream, 
int64_t i,
                                    struct ArrowArray* array) {
-  struct BasicArrayStreamPrivate* private =
+  struct BasicArrayStreamPrivate* private_data =
       (struct BasicArrayStreamPrivate*)array_stream->private_data;
-  ArrowArrayMove(array, &private->arrays[i]);
+  ArrowArrayMove(array, &private_data->arrays[i]);
 }
 
 ArrowErrorCode ArrowBasicArrayStreamValidate(struct ArrowArrayStream* 
array_stream,
                                              struct ArrowError* error) {
-  struct BasicArrayStreamPrivate* private =
+  struct BasicArrayStreamPrivate* private_data =
       (struct BasicArrayStreamPrivate*)array_stream->private_data;
 
   struct ArrowArrayView array_view;
   NANOARROW_RETURN_NOT_OK(
-      ArrowArrayViewInitFromSchema(&array_view, &private->schema, error));
+      ArrowArrayViewInitFromSchema(&array_view, &private_data->schema, error));
 
-  for (int64_t i = 0; i < private->n_arrays; i++) {
-    if (private->arrays[i].release != NULL) {
-      int result = ArrowArrayViewSetArray(&array_view, &private->arrays[i], 
error);
+  for (int64_t i = 0; i < private_data->n_arrays; i++) {
+    if (private_data->arrays[i].release != NULL) {
+      int result = ArrowArrayViewSetArray(&array_view, 
&private_data->arrays[i], error);
       if (result != NANOARROW_OK) {
         ArrowArrayViewReset(&array_view);
         return result;
diff --git a/src/nanoarrow/utils.c b/src/nanoarrow/utils.c
index 7cea4ed..fca0f80 100644
--- a/src/nanoarrow/utils.c
+++ b/src/nanoarrow/utils.c
@@ -169,7 +169,7 @@ void ArrowFree(void* ptr) { free(ptr); }
 static uint8_t* ArrowBufferAllocatorMallocReallocate(
     struct ArrowBufferAllocator* allocator, uint8_t* ptr, int64_t old_size,
     int64_t new_size) {
-  return ArrowRealloc(ptr, new_size);
+  return (uint8_t*)ArrowRealloc(ptr, new_size);
 }
 
 static void ArrowBufferAllocatorMallocFree(struct ArrowBufferAllocator* 
allocator,

Reply via email to