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 6953efe  [R] Stub actually vendoring nanoarrow into the R package (#36)
6953efe is described below

commit 6953efeb0657c72fd66af8f34be66e0a3ed0e26a
Author: Dewey Dunnington <[email protected]>
AuthorDate: Thu Aug 25 13:32:13 2022 -0300

    [R] Stub actually vendoring nanoarrow into the R package (#36)
    
    * remove unused variables
    
    * R package stub that actually contains nanoarrow
    
    * add cmd check to mainworkflow
    
    * Only check on ubuntu for the main CI job
    
    * pre-vendor before running r actions
---
 .github/workflows/build-and-test.yaml     | 39 +++++++++++++++++++++++++++++++
 .github/workflows/docs.yaml               |  6 +++++
 r/NAMESPACE                               |  2 +-
 r/R/nanoarrow-package.R                   | 15 ++++++++----
 r/configure                               | 24 +++++++++++++++++++
 r/man/nanoarrow_build_id.Rd               | 23 ++++++++++++++++++
 r/man/nanoarrow_version.Rd                | 19 ---------------
 r/src/.gitignore                          |  2 ++
 r/src/build_id.c                          | 13 +++++++++++
 r/src/init.c                              |  6 +++--
 r/src/version.c                           | 11 ---------
 r/tests/testthat/test-nanoarrow-package.R |  7 ++++--
 src/nanoarrow/array.c                     |  6 -----
 src/nanoarrow/array_inline.h              |  3 ---
 src/nanoarrow/schema.c                    |  1 -
 src/nanoarrow/utils.c                     | 10 --------
 16 files changed, 128 insertions(+), 59 deletions(-)

diff --git a/.github/workflows/build-and-test.yaml 
b/.github/workflows/build-and-test.yaml
index e594c03..f9f502f 100644
--- a/.github/workflows/build-and-test.yaml
+++ b/.github/workflows/build-and-test.yaml
@@ -158,6 +158,45 @@ jobs:
         with:
           directory: build/cov
 
+  R-CMD-check:
+    runs-on: ${{ matrix.config.os }}
+    name: R / ${{ matrix.config.os }} (${{ matrix.config.r }})
+
+    strategy:
+      fail-fast: false
+      matrix:
+        config:
+          - {os: ubuntu-latest,   r: 'devel', http-user-agent: 'release'}
+
+    env:
+      GITHUB_PAT: ${{ secrets.GITHUB_TOKEN }}
+      R_KEEP_PKG_SOURCE: yes
+
+    steps:
+      - uses: actions/checkout@v2
+
+      # Probably a better way to do this, but for now do the vendor step 
manually
+      - name: Vendor nanoarrow into the R package
+        run: |
+          cd r
+          ./configure
+
+      - uses: r-lib/actions/setup-pandoc@v2
+      - uses: r-lib/actions/setup-r@v2
+        with:
+          r-version: ${{ matrix.config.r }}
+          http-user-agent: ${{ matrix.config.http-user-agent }}
+          use-public-rspm: true
+      - uses: r-lib/actions/setup-r-dependencies@v2
+        with:
+          extra-packages: any::rcmdcheck
+          needs: check
+          working-directory: r
+      - uses: r-lib/actions/check-r-package@v2
+        with:
+          upload-snapshots: true
+          working-directory: r
+
   deploy:
     name: Bundle and deploy
     needs: build-and-test
diff --git a/.github/workflows/docs.yaml b/.github/workflows/docs.yaml
index 7fed010..affd065 100644
--- a/.github/workflows/docs.yaml
+++ b/.github/workflows/docs.yaml
@@ -15,6 +15,12 @@ jobs:
 
     steps:
       - uses: actions/checkout@v2
+      # Probably a better way to do this, but for now do the vendor step 
manually
+      - name: Vendor nanoarrow into the R package
+        run: |
+          cd r
+          ./configure
+      
       - uses: r-lib/actions/setup-pandoc@v2
       - uses: r-lib/actions/setup-r@v2
         with:
diff --git a/r/NAMESPACE b/r/NAMESPACE
index 0ac46ae..7837adc 100644
--- a/r/NAMESPACE
+++ b/r/NAMESPACE
@@ -1,4 +1,4 @@
 # Generated by roxygen2: do not edit by hand
 
-export(nanoarrow_version)
+export(nanoarrow_build_id)
 useDynLib(nanoarrow, .registration = TRUE)
diff --git a/r/R/nanoarrow-package.R b/r/R/nanoarrow-package.R
index c9d331c..19d78b0 100644
--- a/r/R/nanoarrow-package.R
+++ b/r/R/nanoarrow-package.R
@@ -6,15 +6,22 @@
 ## usethis namespace: end
 NULL
 
-#' Underlying 'nanoarrow' C library version
+#' Underlying 'nanoarrow' C library build
+#'
+#' @param runtime Compare TRUE and FALSE values to detect a
+#'   possible ABI mismatch.
 #'
 #' @return A string identifying the version of nanoarrow this package
 #'   was compiled against.
 #' @export
 #'
 #' @examples
-#' nanoarrow_version()
+#' nanoarrow_build_id()
 #'
-nanoarrow_version <- function() {
-  .Call(nanoarrow_c_version)
+nanoarrow_build_id <- function(runtime = TRUE) {
+  if (runtime) {
+    .Call(nanoarrow_c_build_id_runtime)
+  } else {
+    .Call(nanoarrow_c_build_id)
+  }
 }
diff --git a/r/configure b/r/configure
new file mode 100755
index 0000000..fe1fd1b
--- /dev/null
+++ b/r/configure
@@ -0,0 +1,24 @@
+
+# if we are building from within the nanoarrow repo, we want to use cmake
+# to generate the bundled header/source
+if [ -f "../src/nanoarrow/nanoarrow.h" ]; then
+  echo "Bundling nanoarrow using ../CMakeLists.txt"
+  rm src/nanoarrow.h src/nanoarrow.c
+  if [ -d "cmake" ]; then
+    rm -rf cmake
+  fi
+  mkdir cmake && cd cmake
+  cmake ../.. -DNANOARROW_BUNDLE=ON
+  cmake --build . && cmake --install . --prefix=../src
+  cd ..
+  rm -rf cmake
+fi
+
+if [ -f "src/nanoarrow.h" ] && [ -f "src/nanoarrow.c" ]; then
+  echo "Found vendored nanoarrow"
+  exit 0
+fi
+
+echo "Vendored src/nanoarrow.h and/or src/nanoarrow.c are missing"
+echo "Tge .tar.gz was probably built incorrectly and it's probably not your 
fault"
+exit 1
diff --git a/r/man/nanoarrow_build_id.Rd b/r/man/nanoarrow_build_id.Rd
new file mode 100644
index 0000000..cdeaf33
--- /dev/null
+++ b/r/man/nanoarrow_build_id.Rd
@@ -0,0 +1,23 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/nanoarrow-package.R
+\name{nanoarrow_build_id}
+\alias{nanoarrow_build_id}
+\title{Underlying 'nanoarrow' C library build}
+\usage{
+nanoarrow_build_id(runtime = TRUE)
+}
+\arguments{
+\item{runtime}{Compare TRUE and FALSE values to detect a
+possible ABI mismatch.}
+}
+\value{
+A string identifying the version of nanoarrow this package
+was compiled against.
+}
+\description{
+Underlying 'nanoarrow' C library build
+}
+\examples{
+nanoarrow_build_id()
+
+}
diff --git a/r/man/nanoarrow_version.Rd b/r/man/nanoarrow_version.Rd
deleted file mode 100644
index 109d964..0000000
--- a/r/man/nanoarrow_version.Rd
+++ /dev/null
@@ -1,19 +0,0 @@
-% Generated by roxygen2: do not edit by hand
-% Please edit documentation in R/nanoarrow-package.R
-\name{nanoarrow_version}
-\alias{nanoarrow_version}
-\title{Underlying 'nanoarrow' C library version}
-\usage{
-nanoarrow_version()
-}
-\value{
-A string identifying the version of nanoarrow this package
-was compiled against.
-}
-\description{
-Underlying 'nanoarrow' C library version
-}
-\examples{
-nanoarrow_version()
-
-}
diff --git a/r/src/.gitignore b/r/src/.gitignore
index 22034c4..63a7d36 100644
--- a/r/src/.gitignore
+++ b/r/src/.gitignore
@@ -1,3 +1,5 @@
 *.o
 *.so
 *.dll
+nanoarrow.c
+nanoarrow.h
diff --git a/r/src/build_id.c b/r/src/build_id.c
new file mode 100644
index 0000000..da5416b
--- /dev/null
+++ b/r/src/build_id.c
@@ -0,0 +1,13 @@
+#define R_NO_REMAP
+#include <R.h>
+#include <Rinternals.h>
+
+#include "nanoarrow.h"
+
+SEXP nanoarrow_c_build_id() {
+  return Rf_mkString(NANOARROW_BUILD_ID);
+}
+
+SEXP nanoarrow_c_build_id_runtime() {
+  return Rf_mkString(ArrowNanoarrowBuildId());
+}
diff --git a/r/src/init.c b/r/src/init.c
index ba5de52..dd679fe 100644
--- a/r/src/init.c
+++ b/r/src/init.c
@@ -2,10 +2,12 @@
 #include <R.h>
 #include <Rinternals.h>
 
-SEXP nanoarrow_c_version();
+SEXP nanoarrow_c_build_id();
+SEXP nanoarrow_c_build_id_runtime();
 
 static const R_CallMethodDef CallEntries[] = {
-  {"nanoarrow_c_version", (DL_FUNC) &nanoarrow_c_version, 0},
+  {"nanoarrow_c_build_id", (DL_FUNC) &nanoarrow_c_build_id, 0},
+  {"nanoarrow_c_build_id_runtime", (DL_FUNC) &nanoarrow_c_build_id_runtime, 0},
   {NULL, NULL, 0}
 };
 
diff --git a/r/src/version.c b/r/src/version.c
deleted file mode 100644
index 72c2a48..0000000
--- a/r/src/version.c
+++ /dev/null
@@ -1,11 +0,0 @@
-#define R_NO_REMAP
-#include <R.h>
-#include <Rinternals.h>
-
-#ifndef NANOARROW_VERSION_STR
-#define NANOARROW_VERSION_STR "dev"
-#endif
-
-SEXP nanoarrow_c_version() {
-  return Rf_mkString(NANOARROW_VERSION_STR);
-}
diff --git a/r/tests/testthat/test-nanoarrow-package.R 
b/r/tests/testthat/test-nanoarrow-package.R
index 7bd3313..5d3434b 100644
--- a/r/tests/testthat/test-nanoarrow-package.R
+++ b/r/tests/testthat/test-nanoarrow-package.R
@@ -1,4 +1,7 @@
 
-test_that("nanoarrow_version() works", {
-  expect_vector(nanoarrow_version(), character(1))
+test_that("nanoarrow_build_id() works", {
+  expect_identical(
+    nanoarrow_build_id(runtime = TRUE),
+    nanoarrow_build_id(runtime = FALSE)
+  )
 })
diff --git a/src/nanoarrow/array.c b/src/nanoarrow/array.c
index 7fd4011..0e71d7e 100644
--- a/src/nanoarrow/array.c
+++ b/src/nanoarrow/array.c
@@ -331,9 +331,6 @@ static ArrowErrorCode ArrowArrayReserveInternal(struct 
ArrowArray* array,
 
 ArrowErrorCode ArrowArrayReserve(struct ArrowArray* array,
                                  int64_t additional_size_elements) {
-  struct ArrowArrayPrivateData* private_data =
-      (struct ArrowArrayPrivateData*)array->private_data;
-
   struct ArrowArrayView array_view;
   NANOARROW_RETURN_NOT_OK(ArrowArrayViewInitFromArray(&array_view, array));
 
@@ -398,9 +395,6 @@ static ArrowErrorCode ArrowArrayCheckInternalBufferSizes(
 
 ArrowErrorCode ArrowArrayFinishBuilding(struct ArrowArray* array,
                                         struct ArrowError* error) {
-  struct ArrowArrayPrivateData* private_data =
-      (struct ArrowArrayPrivateData*)array->private_data;
-
   // Make sure the value we get with array->buffers[i] is set to the actual
   // pointer (which may have changed from the original due to reallocation)
   ArrowArrayFlushInternalPointers(array);
diff --git a/src/nanoarrow/array_inline.h b/src/nanoarrow/array_inline.h
index 5414fe9..f1f838c 100644
--- a/src/nanoarrow/array_inline.h
+++ b/src/nanoarrow/array_inline.h
@@ -76,9 +76,6 @@ static inline ArrowErrorCode ArrowArrayStartAppending(struct 
ArrowArray* array)
 }
 
 static inline ArrowErrorCode ArrowArrayShrinkToFit(struct ArrowArray* array) {
-  struct ArrowArrayPrivateData* private_data =
-      (struct ArrowArrayPrivateData*)array->private_data;
-
   for (int64_t i = 0; i < 3; i++) {
     struct ArrowBuffer* buffer = ArrowArrayBuffer(array, i);
     NANOARROW_RETURN_NOT_OK(ArrowBufferResize(buffer, buffer->size_bytes, 1));
diff --git a/src/nanoarrow/schema.c b/src/nanoarrow/schema.c
index 3cf23f9..4a839a3 100644
--- a/src/nanoarrow/schema.c
+++ b/src/nanoarrow/schema.c
@@ -1153,7 +1153,6 @@ static ArrowErrorCode ArrowMetadataGetValueInternal(const 
char* metadata,
   struct ArrowStringView existing_value;
   ArrowMetadataReaderInit(&reader, metadata);
 
-  int64_t size = sizeof(int32_t);
   while (ArrowMetadataReaderRead(&reader, &existing_key, &existing_value) ==
          NANOARROW_OK) {
     int key_equal = key->n_bytes == existing_key.n_bytes &&
diff --git a/src/nanoarrow/utils.c b/src/nanoarrow/utils.c
index 5e78a23..f770bb8 100644
--- a/src/nanoarrow/utils.c
+++ b/src/nanoarrow/utils.c
@@ -163,11 +163,6 @@ void* ArrowRealloc(void* ptr, int64_t size) { return 
realloc(ptr, size); }
 
 void ArrowFree(void* ptr) { free(ptr); }
 
-static uint8_t* ArrowBufferAllocatorMallocAllocate(struct 
ArrowBufferAllocator* allocator,
-                                                   int64_t size) {
-  return ArrowMalloc(size);
-}
-
 static uint8_t* ArrowBufferAllocatorMallocReallocate(
     struct ArrowBufferAllocator* allocator, uint8_t* ptr, int64_t old_size,
     int64_t new_size) {
@@ -186,11 +181,6 @@ struct ArrowBufferAllocator ArrowBufferAllocatorDefault() {
   return ArrowBufferAllocatorMalloc;
 }
 
-static uint8_t* ArrowBufferAllocatorNeverAllocate(struct ArrowBufferAllocator* 
allocator,
-                                                  int64_t size) {
-  return NULL;
-}
-
 static uint8_t* ArrowBufferAllocatorNeverReallocate(
     struct ArrowBufferAllocator* allocator, uint8_t* ptr, int64_t old_size,
     int64_t new_size) {

Reply via email to