-
Notifications
You must be signed in to change notification settings - Fork 3.6k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
ARROW-1325: [R] Initial R package that builds against the arrow C++ library #2489
Changes from all commits
2848fd1
fb412ca
a1a5e7c
79c5001
9e3ffb4
89f14b4
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -38,3 +38,4 @@ python/.eggs/ | |
.idea/ | ||
.pytest_cache/ | ||
pkgs | ||
.Rproj.user |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
^.*\.Rproj$ | ||
^\.Rproj\.user$ | ||
^README\.Rmd$ |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,10 @@ | ||
*.o | ||
*.o-* | ||
*.d | ||
*.so | ||
*.dll | ||
.RData | ||
.Rproj.user | ||
.Rhistory | ||
src/Makevars | ||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,21 @@ | ||
Package: arrow | ||
Title: R Integration to 'Apache' 'Arrow' | ||
Version: 0.0.0.9000 | ||
Authors@R: c( | ||
person("Romain", "François", email = "[email protected]", role = c("aut", "cre")), | ||
person("Apache Arrow", email = "[email protected]", role = c("aut", "cph")) | ||
) | ||
Description: R Integration to 'Apache' 'Arrow'. | ||
Depends: R (>= 3.5) | ||
License: Apache License (>= 2.0) | ||
Encoding: UTF-8 | ||
LazyData: true | ||
SystemRequirements: C++11 | ||
LinkingTo: | ||
Rcpp | ||
Imports: | ||
Rcpp | ||
Roxygen: list(markdown = TRUE) | ||
RoxygenNote: 6.0.1.9000 | ||
Suggests: | ||
testthat |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,4 @@ | ||
# Generated by roxygen2: do not edit by hand | ||
|
||
importFrom(Rcpp,sourceCpp) | ||
useDynLib(arrow, .registration = TRUE) |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,7 @@ | ||
# Generated by using Rcpp::compileAttributes() -> do not edit by hand | ||
# Generator token: 10BE3573-1514-4C36-9D1C-5A225CD40393 | ||
|
||
ping_arrow <- function() { | ||
.Call(`_arrow_ping_arrow`) | ||
} | ||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,20 @@ | ||
# 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. | ||
|
||
#' @useDynLib arrow, .registration = TRUE | ||
#' @importFrom Rcpp sourceCpp | ||
NULL |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,40 @@ | ||
--- | ||
output: github_document | ||
--- | ||
|
||
<!-- README.md is generated from README.Rmd. Please edit that file --> | ||
|
||
```{r setup, include = FALSE} | ||
knitr::opts_chunk$set( | ||
collapse = TRUE, | ||
comment = "#>", | ||
fig.path = "man/figures/README-", | ||
out.width = "100%" | ||
) | ||
``` | ||
# arrow | ||
|
||
R integration with Apache Arrow. | ||
|
||
## Installation | ||
|
||
First install a release build of the C++ bindings to arrow. | ||
|
||
```shell | ||
git clone https://github.com/apache/arrow.git | ||
cd arrow/cpp && mkdir release && cd release | ||
|
||
# It is important to statically link to boost libraries | ||
cmake .. -DCMAKE_BUILD_TYPE=Release -DARROW_BOOST_USE_SHARED:BOOL=Off | ||
make install | ||
``` | ||
|
||
Then the R package: | ||
|
||
```r | ||
devtools::install_github("apache/arrow/r") | ||
``` | ||
|
||
## Example | ||
|
||
(not yet) |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,29 @@ | ||
|
||
<!-- README.md is generated from README.Rmd. Please edit that file --> | ||
|
||
# arrow | ||
|
||
R integration with Apache Arrow. | ||
|
||
## Installation | ||
|
||
First install a release build of the C++ bindings to arrow. | ||
|
||
``` shell | ||
git clone https://github.com/apache/arrow.git | ||
cd arrow/cpp && mkdir release && cd release | ||
|
||
# It is important to statically link to boost libraries | ||
cmake .. -DCMAKE_BUILD_TYPE=Release -DARROW_BOOST_USE_SHARED:BOOL=Off | ||
make install | ||
``` | ||
|
||
Then the R package: | ||
|
||
``` r | ||
devtools::install_github("apache/arrow/r") | ||
``` | ||
|
||
## Example | ||
|
||
(not yet) |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,21 @@ | ||
Version: 1.0 | ||
|
||
RestoreWorkspace: No | ||
SaveWorkspace: No | ||
AlwaysSaveHistory: Default | ||
|
||
EnableCodeIndexing: Yes | ||
UseSpacesForTab: Yes | ||
NumSpacesForTab: 2 | ||
Encoding: UTF-8 | ||
|
||
RnwWeave: Sweave | ||
LaTeX: pdfLaTeX | ||
|
||
AutoAppendNewline: Yes | ||
StripTrailingWhitespace: Yes | ||
|
||
BuildType: Package | ||
PackageUseDevtools: Yes | ||
PackageInstallArgs: --no-multiarch --with-keep.source | ||
PackageRoxygenize: rd,collate,namespace |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,21 @@ | ||
#!/bin/sh | ||
|
||
# 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. | ||
|
||
rm -f src/Makevars | ||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,97 @@ | ||
#!/bin/bash | ||
|
||
# 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. | ||
|
||
# Anticonf (tm) script by Jeroen Ooms, Jim Hester (2017) | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I missed this in my first pass. What is the license of this file? For future reference, any third party IP has to be carefully documented -- e.g. if you copy paste code from any other codebase the license must be noted and possibly added to https://github.com/apache/arrow/blob/master/LICENSE.txt. I'm especially wary of things from the R ecosystem because of GPL-ness |
||
# License: MIT | ||
# | ||
# This script will query 'pkg-config' for the required cflags and ldflags. | ||
# If pkg-config is unavailable or does not find the library, try setting | ||
# INCLUDE_DIR and LIB_DIR manually via e.g: | ||
# R CMD INSTALL --configure-vars='INCLUDE_DIR=/.../include LIB_DIR=/.../lib' | ||
|
||
# Library settings | ||
PKG_CONFIG_NAME="arrow" | ||
PKG_DEB_NAME="arrow" | ||
PKG_RPM_NAME="arrow" | ||
PKG_CSW_NAME="arrow" | ||
PKG_BREW_NAME="apache-arrow" | ||
PKG_TEST_HEADER="<arrow/api.h>" | ||
PKG_LIBS="-larrow" | ||
|
||
# Use pkg-config if available | ||
pkg-config --version >/dev/null 2>&1 | ||
if [ $? -eq 0 ]; then | ||
PKGCONFIG_CFLAGS=`pkg-config --cflags --silence-errors ${PKG_CONFIG_NAME}` | ||
PKGCONFIG_LIBS=`pkg-config --libs ${PKG_CONFIG_NAME}` | ||
fi | ||
|
||
# Note that cflags may be empty in case of success | ||
if [ "$INCLUDE_DIR" ] || [ "$LIB_DIR" ]; then | ||
echo "Found INCLUDE_DIR and/or LIB_DIR!" | ||
PKG_CFLAGS="-I$INCLUDE_DIR $PKG_CFLAGS" | ||
PKG_LIBS="-L$LIB_DIR $PKG_LIBS" | ||
elif [ "$PKGCONFIG_CFLAGS" ] || [ "$PKGCONFIG_LIBS" ]; then | ||
echo "Found pkg-config cflags and libs!" | ||
PKG_CFLAGS=${PKGCONFIG_CFLAGS} | ||
PKG_LIBS=${PKGCONFIG_LIBS} | ||
elif [[ "$OSTYPE" == "darwin"* ]]; then | ||
if [ "$(command -v brew)" ]; then | ||
BREWDIR=$(brew --prefix) | ||
else | ||
curl -sfL "https://jeroen.github.io/autobrew/default" > autobrew | ||
source autobrew | ||
fi | ||
PKG_CFLAGS="-I$BREWDIR/opt/$PKG_BREW_NAME/include" | ||
PKG_LIBS="-L$BREWDIR/opt/$PKG_BREW_NAME/lib $PKG_LIBS" | ||
fi | ||
|
||
# For debugging | ||
echo "PKG_CFLAGS=$PKG_CFLAGS" | ||
echo "PKG_LIBS=$PKG_LIBS" | ||
|
||
# Find compiler | ||
CXXCPP=$("${R_HOME}"/bin/R CMD config CXXCPP) | ||
CXX11FLAGS=$("${R_HOME}"/bin/R CMD config CXX11FLAGS) | ||
CXX11STD=$("${R_HOME}"/bin/R CMD config CXX11STD) | ||
CPPFLAGS=$("${R_HOME}"/bin/R CMD config CPPFLAGS) | ||
|
||
# Test configuration | ||
echo "#include $PKG_TEST_HEADER" | ${CXXCPP} ${CPPFLAGS} ${PKG_CFLAGS} ${CXX11FLAGS} ${CXX11STD} -xc++ - >/dev/null 2>&1 | ||
|
||
# Customize the error | ||
if [ $? -ne 0 ]; then | ||
echo "------------------------- ANTICONF ERROR ---------------------------" | ||
echo "Configuration failed because $PKG_CONFIG_NAME was not found. Try installing:" | ||
echo " * deb: $PKG_DEB_NAME (Debian, Ubuntu, etc)" | ||
echo " * rpm: $PKG_RPM_NAME (Fedora, CentOS, RHEL)" | ||
echo " * csw: $PKG_CSW_NAME (Solaris)" | ||
echo " * brew: $PKG_BREW_NAME (Mac OSX)" | ||
echo "If $PKG_CONFIG_NAME is already installed, check that 'pkg-config' is in your" | ||
echo "PATH and PKG_CONFIG_PATH contains a $PKG_CONFIG_NAME.pc file. If pkg-config" | ||
echo "is unavailable you can set INCLUDE_DIR and LIB_DIR manually via:" | ||
echo "R CMD INSTALL --configure-vars='INCLUDE_DIR=... LIB_DIR=...'" | ||
echo "--------------------------------------------------------------------" | ||
exit 1; | ||
fi | ||
|
||
# Write to Makevars | ||
sed -e "s|@cflags@|$PKG_CFLAGS|" -e "s|@libs@|$PKG_LIBS|" src/Makevars.in > src/Makevars | ||
|
||
# Success | ||
exit 0 |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
*.o | ||
*.so | ||
*.dll |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,21 @@ | ||
# 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. | ||
|
||
PKG_CPPFLAGS=@cflags@ | ||
PKG_CXXFLAGS=$(C_VISIBILITY) | ||
CXX_STD=CXX11 | ||
PKG_LIBS=@libs@ |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Any strong opinions about "R/" vs. "r/" I am OK with either
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Lower case is fine, that's what other languages do
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think lower case for the outer subdirectory is fine, but the R code has to be in an uppercase
R
. So as long as it doesn't look too weird to haver/R/*
.