|
26 | 26 | # R CMD INSTALL --configure-vars='INCLUDE_DIR=/.../include LIB_DIR=/.../lib' |
27 | 27 |
|
28 | 28 | # Library settings |
29 | | -PKG_CONFIG_NAME="arrow parquet arrow-dataset" |
| 29 | +PKG_CONFIG_NAME="arrow" |
30 | 30 | PKG_DEB_NAME="(unsuppored)" |
31 | 31 | PKG_RPM_NAME="(unsuppored)" |
32 | 32 | PKG_BREW_NAME="apache-arrow" |
33 | 33 | PKG_TEST_HEADER="<arrow/api.h>" |
34 | | -# These must be the same order as $(pkg-config --libs arrow-dataset) |
35 | | -PKG_LIBS="-larrow_dataset -lparquet -larrow" |
| 34 | +PKG_LIBS="-larrow" |
36 | 35 |
|
37 | 36 | # Make some env vars case-insensitive |
38 | 37 | ARROW_R_DEV=`echo $ARROW_R_DEV | tr '[:upper:]' '[:lower:]'` |
|
69 | 68 | if [ "$INCLUDE_DIR" ] || [ "$LIB_DIR" ]; then |
70 | 69 | echo "*** Using INCLUDE_DIR/LIB_DIR" |
71 | 70 | PKG_CFLAGS="-I$INCLUDE_DIR $PKG_CFLAGS" |
72 | | - PKG_LIBS="-L$LIB_DIR $PKG_LIBS" |
| 71 | + PKG_DIRS="-L$LIB_DIR" |
73 | 72 | else |
74 | 73 | # Use pkg-config if available and allowed |
75 | 74 | pkg-config --version >/dev/null 2>&1 |
76 | 75 | if [ "$ARROW_USE_PKG_CONFIG" != "false" ] && [ $? -eq 0 ]; then |
77 | 76 | PKGCONFIG_CFLAGS=`pkg-config --cflags --silence-errors ${PKG_CONFIG_NAME}` |
78 | | - PKGCONFIG_LIBS=`pkg-config --libs --silence-errors ${PKG_CONFIG_NAME}` |
| 77 | + PKGCONFIG_LIBS=`pkg-config --libs-only-l --silence-errors ${PKG_CONFIG_NAME}` |
| 78 | + PKGCONFIG_DIRS=`pkg-config --libs-only-L --silence-errors ${PKG_CONFIG_NAME}` |
| 79 | + # TODO: what about --libs-only-other? |
79 | 80 | fi |
80 | 81 |
|
81 | 82 | if [ "$PKGCONFIG_CFLAGS" ] || [ "$PKGCONFIG_LIBS" ]; then |
82 | 83 | echo "*** Arrow C++ libraries found via pkg-config" |
83 | 84 | PKG_CFLAGS="$PKGCONFIG_CFLAGS" |
84 | 85 | PKG_LIBS=${PKGCONFIG_LIBS} |
| 86 | + PKG_DIRS=${PKGCONFIG_DIRS} |
85 | 87 |
|
86 | 88 | # Check for version mismatch |
87 | 89 | PC_LIB_VERSION=`pkg-config --modversion arrow` |
|
98 | 100 | if [ "$FORCE_AUTOBREW" != "true" ] && [ "`command -v brew`" ] && [ "`brew ls --versions ${PKG_BREW_NAME}`" != "" ]; then |
99 | 101 | echo "*** Using Homebrew ${PKG_BREW_NAME}" |
100 | 102 | BREWDIR=`brew --prefix` |
101 | | - PKG_LIBS="-L$BREWDIR/opt/$PKG_BREW_NAME/lib $PKG_LIBS -larrow_bundled_dependencies" |
| 103 | + PKG_LIBS="$PKG_LIBS -larrow_bundled_dependencies" |
| 104 | + PKG_DIRS="-L$BREWDIR/opt/$PKG_BREW_NAME/lib $PKG_DIRS" |
102 | 105 | PKG_CFLAGS="-I$BREWDIR/opt/$PKG_BREW_NAME/include" |
103 | 106 | else |
104 | 107 | echo "*** Downloading ${PKG_BREW_NAME}" |
|
114 | 117 | if [ $? -ne 0 ]; then |
115 | 118 | echo "Failed to retrieve binary for ${PKG_BREW_NAME}" |
116 | 119 | fi |
117 | | - # autobrew sets `PKG_LIBS` and `PKG_CFLAGS` |
| 120 | + # autobrew sets `PKG_LIBS`, `PKG_DIRS`, and `PKG_CFLAGS` |
118 | 121 | fi |
119 | 122 | else |
120 | 123 | # Set some default values/backwards compatibility |
|
135 | 138 |
|
136 | 139 | LIB_DIR="libarrow/arrow-${VERSION}/lib" |
137 | 140 | if [ -d "$LIB_DIR" ]; then |
138 | | - # Enumerate the static libs and add to PKG_LIBS |
139 | | - # (technically repeating arrow libs so they're in the right order) |
| 141 | + # Enumerate the static libs, put their -l flags in BUNDLED_LIBS, |
| 142 | + # and put their -L location in PKG_DIRS |
140 | 143 | # |
141 | 144 | # If tools/linuxlibs.R fails to produce libs, this dir won't exist |
142 | 145 | # so don't try (the error message from `ls` would be misleading) |
|
145 | 148 | # TODO: what about non-bundled deps? |
146 | 149 | BUNDLED_LIBS=`cd $LIB_DIR && ls *.a` |
147 | 150 | BUNDLED_LIBS=`echo $BUNDLED_LIBS | sed -E "s/lib(.*)\.a/-l\1/" | sed -e "s/\\.a lib/ -l/g"` |
148 | | - PKG_LIBS="-L$(pwd)/$LIB_DIR $PKG_LIBS $BUNDLED_LIBS" |
| 151 | + PKG_DIRS="-L$(pwd)/$LIB_DIR" |
149 | 152 | fi |
150 | 153 | fi |
151 | 154 | fi |
@@ -182,15 +185,35 @@ if [ $? -eq 0 ] || [ "$UNAME" = "Darwin" ]; then |
182 | 185 | # Always build with arrow on macOS |
183 | 186 | PKG_CFLAGS="$PKG_CFLAGS -DARROW_R_WITH_ARROW" |
184 | 187 | # Check for features |
185 | | - LIB_DIR=`echo $PKG_LIBS | sed -e 's/ -l.*//' | sed -e 's/^-L//'` |
186 | | - grep 'set(ARROW_S3 "ON")' $LIB_DIR/cmake/arrow/ArrowOptions.cmake >/dev/null 2>&1 |
| 188 | + LIB_DIR=`echo $PKG_DIRS | sed -e 's/^-L//'` |
| 189 | + ARROW_OPTS_CMAKE="$LIB_DIR/cmake/arrow/ArrowOptions.cmake" |
| 190 | + # Check for Parquet |
| 191 | + grep 'set(ARROW_PARQUET "ON")' $ARROW_OPTS_CMAKE >/dev/null 2>&1 |
| 192 | + if [ $? -eq 0 ]; then |
| 193 | + PKG_CFLAGS="$PKG_CFLAGS -DARROW_R_WITH_PARQUET" |
| 194 | + PKG_LIBS="-lparquet $PKG_LIBS" |
| 195 | + # NOTE: parquet is assumed to have the same -L flag as arrow |
| 196 | + # so there is no need to add its location to PKG_DIRS |
| 197 | + fi |
| 198 | + # Check for Arrow Dataset subcomponent |
| 199 | + grep 'set(ARROW_DATASET "ON")' $ARROW_OPTS_CMAKE >/dev/null 2>&1 |
| 200 | + if [ $? -eq 0 ]; then |
| 201 | + PKG_CFLAGS="$PKG_CFLAGS -DARROW_R_WITH_DATASET" |
| 202 | + PKG_LIBS="-larrow_dataset $PKG_LIBS" |
| 203 | + # NOTE: arrow-dataset is assumed to have the same -L flag as arrow |
| 204 | + # so there is no need to add its location to PKG_DIRS |
| 205 | + fi |
| 206 | + # Check for S3 |
| 207 | + grep 'set(ARROW_S3 "ON")' $ARROW_OPTS_CMAKE >/dev/null 2>&1 |
187 | 208 | if [ $? -eq 0 ]; then |
188 | 209 | PKG_CFLAGS="$PKG_CFLAGS -DARROW_R_WITH_S3" |
189 | 210 | if [ "$BUNDLED_LIBS" != "" ]; then |
190 | 211 | # We're depending on openssl/curl from the system, so they're not in the bundled deps |
191 | | - PKG_LIBS="$PKG_LIBS -lssl -lcrypto -lcurl" |
| 212 | + BUNDLED_LIBS="$BUNDLED_LIBS -lssl -lcrypto -lcurl" |
192 | 213 | fi |
193 | 214 | fi |
| 215 | + # prepend PKG_DIRS and append BUNDLED_LIBS to PKG_LIBS |
| 216 | + PKG_LIBS="$PKG_DIRS $PKG_LIBS $BUNDLED_LIBS" |
194 | 217 | echo "PKG_CFLAGS=$PKG_CFLAGS" |
195 | 218 | echo "PKG_LIBS=$PKG_LIBS" |
196 | 219 | else |
|
0 commit comments