Skip to content

Commit 5d9ccb7

Browse files
ARROW-6437: [R] Add AWS SDK to system dependencies for macOS and Windows
This adds S3 support to the binary macOS and Windows (Rtools40 only, i.e. R >= 4.0) packages. Closes #7928 from nealrichardson/aws-sdk-r Authored-by: Neal Richardson <neal.p.richardson@gmail.com> Signed-off-by: Neal Richardson <neal.p.richardson@gmail.com>
1 parent 0576da6 commit 5d9ccb7

7 files changed

Lines changed: 39 additions & 13 deletions

File tree

ci/scripts/PKGBUILD

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,8 @@ pkgdesc="Apache Arrow is a cross-language development platform for in-memory dat
2424
arch=("any")
2525
url="https://arrow.apache.org/"
2626
license=("Apache-2.0")
27-
depends=("${MINGW_PACKAGE_PREFIX}-thrift"
27+
depends=("${MINGW_PACKAGE_PREFIX}-aws-sdk-cpp"
28+
"${MINGW_PACKAGE_PREFIX}-thrift"
2829
"${MINGW_PACKAGE_PREFIX}-snappy"
2930
"${MINGW_PACKAGE_PREFIX}-zlib"
3031
"${MINGW_PACKAGE_PREFIX}-lz4"
@@ -74,6 +75,9 @@ build() {
7475
export PATH="/C/Rtools${MINGW_PREFIX/mingw/mingw_}/bin:$PATH"
7576
export CPPFLAGS="${CPPFLAGS} -I${MINGW_PREFIX}/include"
7677
export LIBS="-L${MINGW_PREFIX}/libs"
78+
export ARROW_S3=OFF
79+
else
80+
export ARROW_S3=ON
7781
fi
7882

7983
MSYS2_ARG_CONV_EXCL="-DCMAKE_INSTALL_PREFIX=" \
@@ -94,6 +98,7 @@ build() {
9498
-DARROW_MIMALLOC=ON \
9599
-DARROW_PACKAGE_PREFIX="${MINGW_PREFIX}" \
96100
-DARROW_PARQUET=ON \
101+
-DARROW_S3="${ARROW_S3}" \
97102
-DARROW_SNAPPY_USE_SHARED=OFF \
98103
-DARROW_USE_GLOG=OFF \
99104
-DARROW_WITH_LZ4=ON \

ci/scripts/r_windows_build.sh

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,12 @@ if [ "$RTOOLS_VERSION" = "35" ]; then
3434
# lib-4.9.3 is for libraries compiled with gcc 4.9 (Rtools 3.5)
3535
RWINLIB_LIB_DIR="lib-4.9.3"
3636
else
37+
# Uncomment L38-41 if you're testing a new rtools dependency that hasn't yet sync'd to CRAN
38+
# curl https://raw.githubusercontent.com/r-windows/rtools-packages/master/pacman.conf > /etc/pacman.conf
39+
# curl -OSsl "http://repo.msys2.org/msys/x86_64/msys2-keyring-r21.b39fb11-1-any.pkg.tar.xz"
40+
# pacman -U --noconfirm msys2-keyring-r21.b39fb11-1-any.pkg.tar.xz && rm msys2-keyring-r21.b39fb11-1-any.pkg.tar.xz
41+
# pacman --noconfirm -Scc
42+
3743
pacman --noconfirm -Syy
3844
RWINLIB_LIB_DIR="lib"
3945
fi
@@ -84,8 +90,8 @@ cp $MSYS_LIB_DIR/mingw64/lib/lib{thrift,snappy}.a $DST_DIR/${RWINLIB_LIB_DIR}/x6
8490
cp $MSYS_LIB_DIR/mingw32/lib/lib{thrift,snappy}.a $DST_DIR/${RWINLIB_LIB_DIR}/i386
8591

8692
# These are from https://dl.bintray.com/rtools/mingw{32,64}/
87-
cp $MSYS_LIB_DIR/mingw64/lib/lib{zstd,lz4,crypto}.a $DST_DIR/lib/x64
88-
cp $MSYS_LIB_DIR/mingw32/lib/lib{zstd,lz4,crypto}.a $DST_DIR/lib/i386
93+
cp $MSYS_LIB_DIR/mingw64/lib/lib{zstd,lz4,crypto,aws*}.a $DST_DIR/lib/x64
94+
cp $MSYS_LIB_DIR/mingw32/lib/lib{zstd,lz4,crypto,aws*}.a $DST_DIR/lib/i386
8995

9096
# Create build artifact
9197
zip -r ${DST_DIR}.zip $DST_DIR

dev/tasks/homebrew-formulae/autobrew/apache-arrow.rb

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ class ApacheArrow < Formula
3232
# NOTE: if you add something here, be sure to add to PKG_LIBS in r/tools/autobrew
3333
depends_on "boost" => :build
3434
depends_on "cmake" => :build
35+
depends_on "aws-sdk-cpp"
3536
depends_on "lz4"
3637
depends_on "snappy"
3738
depends_on "thrift"
@@ -50,14 +51,14 @@ def install
5051
-DARROW_JEMALLOC=ON
5152
-DARROW_USE_GLOG=OFF
5253
-DARROW_PYTHON=OFF
53-
-DARROW_S3=OFF
54+
-DARROW_S3=ON
5455
-DARROW_WITH_LZ4=ON
5556
-DARROW_WITH_ZLIB=ON
5657
-DARROW_WITH_SNAPPY=ON
5758
-DARROW_WITH_UTF8PROC=OFF
5859
-DARROW_BUILD_UTILITIES=ON
5960
-DARROW_VERBOSE_THIRDPARTY_BUILD=ON
60-
-DCMAKE_UNITY_BUILD=ON
61+
-DCMAKE_UNITY_BUILD=OFF
6162
-DPARQUET_BUILD_EXECUTABLES=ON
6263
-DLZ4_HOME=#{Formula["lz4"].prefix}
6364
-DTHRIFT_HOME=#{Formula["thrift"].prefix}

dev/tasks/homebrew-formulae/travis.osx.r.yml

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,5 @@ script:
4949
- Rscript -e 'install.packages("rcmdcheck")'
5050
# Note that this is not --as-cran. CRAN doesn't do macOS checks --as-cran
5151
- travis_wait Rscript -e "rcmdcheck::rcmdcheck(build_args = '--no-build-vignettes', args = c('--no-manual', '--ignore-vignettes', '--run-donttest'), error_on = 'warning', check_dir = 'check')"
52-
after_failure:
53-
# If there's a build failure, it's probably in this log
54-
- cat arrow.Rcheck/00install.out
52+
# If there's a build failure, it's probably in this log. Let's print it regardless though
53+
- cat check/arrow.Rcheck/00install.out

r/configure

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,8 @@ else
9898
if [ "$FORCE_AUTOBREW" != "true" ] && [ "`command -v brew`" ] && [ "`brew ls --versions ${PKG_BREW_NAME}`" != "" ]; then
9999
echo "*** Using Homebrew ${PKG_BREW_NAME}"
100100
BREWDIR=`brew --prefix`
101+
PKG_LIBS="-L$BREWDIR/opt/$PKG_BREW_NAME/lib $PKG_LIBS -larrow_bundled_dependencies"
102+
PKG_CFLAGS="-I$BREWDIR/opt/$PKG_BREW_NAME/include"
101103
else
102104
echo "*** Downloading ${PKG_BREW_NAME}"
103105
if [ -f "autobrew" ]; then
@@ -112,9 +114,8 @@ else
112114
if [ $? -ne 0 ]; then
113115
echo "Failed to retrieve binary for ${PKG_BREW_NAME}"
114116
fi
117+
# autobrew sets `PKG_LIBS` and `PKG_CFLAGS`
115118
fi
116-
PKG_CFLAGS="-I$BREWDIR/opt/$PKG_BREW_NAME/include"
117-
PKG_LIBS="-L$BREWDIR/opt/$PKG_BREW_NAME/lib $PKG_LIBS -larrow_bundled_dependencies"
118119
elif [ "$UNAME" = "Linux" ]; then
119120
# Set some default values/backwards compatibility
120121
if [ "${LIBARROW_DOWNLOAD}" = "" ] && [ "${NOT_CRAN}" != "" ]; then

r/configure.win

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,11 +44,22 @@ else
4444
fi
4545
OPENSSL_LIBS="-lcrypto -lcrypt32"
4646
MIMALLOC_LIBS="-lbcrypt -lpsapi"
47+
AWS_LIBS="-laws-cpp-sdk-config -laws-cpp-sdk-transfer -laws-cpp-sdk-identity-management -laws-cpp-sdk-cognito-identity -laws-cpp-sdk-sts -laws-cpp-sdk-s3 -laws-cpp-sdk-core -laws-c-event-stream -laws-checksums -laws-c-common -lUserenv -lversion -lws2_32 -lBcrypt -lWininet -lwinhttp"
4748

4849
# NOTE: If you make changes to the libraries below, you should also change
4950
# ci/scripts/r_windows_build.sh and ci/scripts/PKGBUILD
5051
PKG_CFLAGS="-I${RWINLIB}/include -DARROW_STATIC -DPARQUET_STATIC -DARROW_DS_STATIC -DARROW_R_WITH_ARROW"
51-
PKG_LIBS="-L${RWINLIB}/lib"'$(subst gcc,,$(COMPILED_BY))$(R_ARCH) '"-L${RWINLIB}/lib"'$(R_ARCH) '"-lparquet -larrow_dataset -larrow -larrow_bundled_dependencies -lthrift -lsnappy -lz -lzstd -llz4 ${MIMALLOC_LIBS} ${OPENSSL_LIBS} -lws2_32"
52+
PKG_LIBS="-L${RWINLIB}/lib"'$(subst gcc,,$(COMPILED_BY))$(R_ARCH) '"-L${RWINLIB}/lib"'$(R_ARCH) '"-lparquet -larrow_dataset -larrow -larrow_bundled_dependencies -lthrift -lsnappy -lz -lzstd -llz4 ${MIMALLOC_LIBS} ${OPENSSL_LIBS}"
53+
54+
# S3 support only for Rtools40 (i.e. R >= 4.0)
55+
"${R_HOME}/bin${R_ARCH_BIN}/Rscript.exe" -e 'R.version$major >= 4' | grep TRUE >/dev/null 2>&1
56+
if [ $? -eq 0 ]; then
57+
PKG_CFLAGS="${PKG_CFLAGS} -DARROW_R_WITH_S3"
58+
PKG_LIBS="${PKG_LIBS} ${AWS_LIBS}"
59+
else
60+
# It seems that order matters
61+
PKG_LIBS="${PKG_LIBS} -lws2_32"
62+
fi
5263

5364
# Set any user-defined CXXFLAGS
5465
if [ "$ARROW_R_CXXFLAGS" ]; then

r/tools/autobrew

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,14 +40,15 @@ if [ -f "$LOCAL_FORMULA" ]; then
4040
$BREW deps -n "$LOCAL_FORMULA" 2>/dev/null
4141
BREW_DEPS=$($BREW deps -n "$LOCAL_FORMULA" 2>/dev/null)
4242
$BREW install --force-bottle $BREW_DEPS 2>&1 | perl -pe 's/Warning/Note/gi'
43-
$BREW install --build-from-source --HEAD "$LOCAL_FORMULA" 2>&1 | perl -pe 's/Warning/Note/gi'
43+
$BREW install -v --build-from-source --HEAD "$LOCAL_FORMULA" 2>&1 | perl -pe 's/Warning/Note/gi'
4444
else
4545
$BREW install --force-bottle $BREW_DEPS $PKG_BREW_NAME 2>&1 | perl -pe 's/Warning/Note/gi'
4646
fi
4747

4848
# Hardcode this for my custom autobrew build
4949
rm -f $BREWDIR/lib/*.dylib
50-
PKG_LIBS="-L$BREWDIR/lib -lparquet -larrow_dataset -larrow -lthrift -llz4 -lsnappy"
50+
AWS_LIBS="-laws-cpp-sdk-config -laws-cpp-sdk-transfer -laws-cpp-sdk-identity-management -laws-cpp-sdk-cognito-identity -laws-cpp-sdk-sts -laws-cpp-sdk-s3 -laws-cpp-sdk-core -laws-c-event-stream -laws-checksums -laws-c-common -lpthread -lcurl"
51+
PKG_LIBS="-L$BREWDIR/lib -lparquet -larrow_dataset -larrow -larrow_bundled_dependencies -lthrift -llz4 -lsnappy $AWS_LIBS"
5152

5253
# Prevent CRAN builder from linking against old libs in /usr/local/lib
5354
for FILE in $BREWDIR/Cellar/*/*/lib/*.a; do
@@ -58,5 +59,7 @@ for FILE in $BREWDIR/Cellar/*/*/lib/*.a; do
5859
PKG_LIBS=`echo $PKG_LIBS | sed "s/-l$LIBNAME/-lbrew$LIBNAME/g"`
5960
done
6061

62+
PKG_CFLAGS="-I$BREWDIR/opt/$PKG_BREW_NAME/include -DARROW_R_WITH_S3"
63+
6164
unset HOMEBREW_NO_ANALYTICS
6265
unset HOMEBREW_NO_AUTO_UPDATE

0 commit comments

Comments
 (0)