-
Notifications
You must be signed in to change notification settings - Fork 10
/
configure
executable file
·144 lines (121 loc) · 5.09 KB
/
configure
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
# This configure script finds OpenSSL and Abseil, optionally building
# Abseil if not found.
# Anticonf (tm) script by Jeroen Ooms (2020) for finding OpenSSL
# 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="openssl"
PKG_DEB_NAME="libssl-dev"
PKG_RPM_NAME="openssl-devel"
PKG_BREW_NAME="openssl"
PKG_LIBS="-lssl -lcrypto"
PKG_CFLAGS=""
# Use pkg-config if available
pkg-config ${PKG_CONFIG_NAME} --atleast-version=1.0 2>/dev/null
if [ $? -eq 0 ]; then
PKGCONFIG_CFLAGS=`pkg-config --cflags ${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 OpenSSL pkg-config cflags and libs!"
PKG_CFLAGS=${PKGCONFIG_CFLAGS}
PKG_LIBS=${PKGCONFIG_LIBS}
fi
# Find compiler
CC=`${R_HOME}/bin/R CMD config CC`
CFLAGS=`${R_HOME}/bin/R CMD config CFLAGS`
CPPFLAGS=`${R_HOME}/bin/R CMD config CPPFLAGS`
# For debugging
echo "Testing compiler OpenSSL configuration using PKG_CFLAGS=$PKG_CFLAGS"
# Test configuration
${CC} ${CPPFLAGS} ${PKG_CFLAGS} ${CFLAGS} -E tools/test_openssl.c >/dev/null 2>configure.log
# Customize the error
if [ $? -ne 0 ]; then
echo "--------------------------- [ANTICONF] --------------------------------"
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 " * 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 "-------------------------- [ERROR MESSAGE] ---------------------------"
cat configure.log
echo "--------------------------------------------------------------------"
exit 1
fi
# Check pkg-config for abseil-cpp, but fall back to a cmake build
# because a sufficient version of abseil-cpp is not available on
# all platforms (notably, Ubuntu 20.04 and Ubuntu 22.04).
export PKG_CONFIG_PATH="${PKG_CONFIG_PATH}:`pwd`/tools/pkgconfig"
echo "** Using PKG_CONFIG_PATH=${PKG_CONFIG_PATH}"
if pkg-config absl_s2 --libs >/dev/null 2>/dev/null; then
echo "** Using abseil-cpp from pkg-config"
PKGCONFIG_CFLAGS=`pkg-config --cflags-only-I absl_s2`
PKGCONFIG_LIBS=`pkg-config --libs absl_s2`
PKG_CFLAGS="${PKGCONFIG_CFLAGS} ${PKG_CFLAGS}"
PKG_LIBS="${PKGCONFIG_LIBS} ${PKG_LIBS}"
else
echo "** Building abseil-cpp using cmake"
CMAKE_INSTALL_PREFIX="`pwd`/tools/dist"
if tools/build_absl.sh "${CMAKE_INSTALL_PREFIX}"; then
echo "** Done!"
else
echo "** CMake build of Abseil failed"
echo "** Abseil can be installed with:"
echo "** - apt-get install libabsl-dev"
echo "** - dnf install abseil-cpp-devel"
echo "** - brew install abseil"
echo "** If a system install of Abseil is not possible, cmake is required to build"
echo "** the internal vendored copy."
exit 1
fi
# Clean up build directory
rm -rf tools/build
# Depending on the cmake options this can end up in a subdirectory of lib
ABSL_BASE_PC=`find tools/dist -name absl_base.pc`
R_S2_PKG_CONFIG_PATH=`dirname "${ABSL_BASE_PC}"`
R_S2_ABSL_HOME="`pwd`/tools/dist"
export PKG_CONFIG_PATH="${R_S2_PKG_CONFIG_PATH}:${PKG_CONFIG_PATH}"
echo "** Using PKG_CONFIG_PATH=${PKG_CONFIG_PATH}"
PKGCONFIG_LIBS=`pkg-config --libs absl_s2`
if [ -z "${PKGCONFIG_LIBS}" ]; then
echo "** Failed to resolve built vendored copy of Abseil using pkg-config"
exit 1
fi
PKG_CFLAGS="-I${R_S2_ABSL_HOME}/include ${PKG_CFLAGS}"
PKG_LIBS="${PKGCONFIG_LIBS} ${PKG_LIBS}"
fi
# Check compile of test file
CXX17="`${R_HOME}/bin/R CMD config CXX17`"
CXX17FLAGS=`"${R_HOME}"/bin/R CMD config CXX17FLAGS`
CXX17STD=`"${R_HOME}"/bin/R CMD config CXX17STD`
echo "Testing Abseil configuration using PKG_CFLAGS=${PKG_CFLAGS}"
${CXX17} ${CPPFLAGS} ${PKG_CFLAGS} ${CXX17FLAGS} ${CXX17STD} -E tools/test_absl.cc >/dev/null 2>>configure.log
if [ $? -ne 0 ]; then
echo "Test compile failed!"
echo "------- Error ---------"
cat configure.log
echo "-----------------------"
exit 1
fi
# From apache/arrow/r/configure:
# If on Raspberry Pi, need to manually link against latomic
# See: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=81358 for similar example
if grep raspbian /etc/os-release >/dev/null 2>&1; then
PKG_LIBS="-latomic $PKG_LIBS"
fi
echo "Using PKG_LIBS=$PKG_LIBS"
echo "Using PKG_CFLAGS=$PKG_CFLAGS"
# Write to Makevars
sed -e "s|@cflags@|$PKG_CFLAGS|" -e "s|@libs@|$PKG_LIBS|" src/Makevars.in > src/Makevars
# Success
exit 0