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) {