forked from r-dbi/RPostgres
-
Notifications
You must be signed in to change notification settings - Fork 0
/
configure
executable file
·145 lines (130 loc) · 4.99 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
145
# Anticonf script by Jeroen Ooms (2020)
# This script will prefer cflags (specifically includefile dirs) and lib dirs
# in the following order of precedence:
# (1) INCLUDE_DIR or LIB_DIR entered explicitly on the command line, e.g.
# R CMD INSTALL --configure-vars='INCLUDE_DIR=/.../include LIB_DIR=/.../lib'
# (2) Values found via 'pkg-config' for the libpq package.
# (3) Values found via 'pg_config' given a PostgreSQL installation.
# Library settings
PKG_CONFIG_NAME="libpq"
PKG_DEB_NAME="libpq-dev libssl-dev"
PKG_RPM_NAME="postgresql-devel"
PKG_AMZ_RPM_NAMES="postgreql8-devel, postgresql92-devel, postgresql93-devel, or postgresql94-devel"
PKG_CSW_NAME="postgresql_dev"
PKG_BREW_NAME="libpq"
PKG_TEST_HEADER="<libpq-fe.h>"
PKG_LIBS="-lpq"
# Extra checks on MacOS for SSL support in libpq
# command -v is probably fine: https://stackoverflow.com/a/677212/946850
if [ "`uname`" = Darwin ] && [ "`command -v pkg-config`" ]; then
if pkg-config --atleast-version=12 libpq; then
case "`pkg-config --libs --static libpq`" in
*crypto*)
echo "Local libpq has SSL support"
;;
*)
echo "Local libpq does not have SSL support"
FORCE_AUTOBREW=1
;;
esac
else
FORCE_AUTOBREW=1
fi
fi
# pkg-config values (if available)
if [ -z "$FORCE_AUTOBREW" ] && [ "`command -v pkg-config`" ]; then
PKGCONFIG_CFLAGS=`pkg-config --cflags --silence-errors ${PKG_CONFIG_NAME}`
PKGCONFIG_LIBS=`pkg-config --libs --silence-errors ${PKG_CONFIG_NAME}`
PKGCONFIG_MODVERSION=`pkg-config --modversion --silence-errors ${PKG_CONFIG_NAME}`
# Workaround for broken libpq.pc files on some systems
if [ `uname` = "Darwin" ]; then
case "$PKGCONFIG_CFLAGS" in
*"Internal.sdk"*)
unset PKGCONFIG_CFLAGS
unset PKGCONFIG_LIBS
;;
esac
if [ -z "$PKGCONFIG_CFLAGS" ]; then
unset PKGCONFIG_LIBS
fi
fi
fi
# pg_config values (if available)
if [ -z "$FORCE_AUTOBREW" ] && [ "`command -v pg_config`" ]; then
PG_INC_DIR=`pg_config --includedir`
PG_LIB_DIR=`pg_config --libdir`
PG_VERSION=`pg_config --version`
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_CONFIG_NAME $PKGCONFIG_MODVERSION)!"
PKG_CFLAGS=${PKGCONFIG_CFLAGS}
PKG_LIBS=${PKGCONFIG_LIBS}
elif [ "$PG_INC_DIR" ] || [ "$PG_LIB_DIR" ]; then
echo "Found pg_config includedir and libdir ($PG_VERSION)!"
case "$PG_VERSION" in
"PostgreSQL 8"*)
echo "This version of libpq is too old! We need at least 9.0!"
exit 1
;;
esac
PKG_CFLAGS="-I${PG_INC_DIR}"
PKG_LIBS="-L${PG_LIB_DIR} ${PKG_LIBS}"
elif [ `uname` = "Darwin" ]; then
brew --version 2>/dev/null
if [ $? -eq 0 ] && [ -z "$FORCE_AUTOBREW" ]; then
BREWDIR=`brew --prefix`
PKG_CFLAGS="-I$BREWDIR/opt/$PKG_BREW_NAME/include"
PKG_LIBS="-L$BREWDIR/opt/$PKG_BREW_NAME/lib $PKG_LIBS"
else
curl -sfL "https://autobrew.github.io/scripts/libpq" > autobrew
. ./autobrew
fi
fi
if [ "$R_PLOGR_ENABLE" ]; then
PKG_PLOGR=-DPLOGR_ENABLE
fi
# For debugging
echo "Using PKG_CFLAGS=$PKG_CFLAGS"
echo "Using PKG_LIBS=$PKG_LIBS"
echo "Using PKG_PLOGR=$PKG_PLOGR"
# 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`
# Test configuration
echo "#include $PKG_TEST_HEADER" | ${CC} ${CPPFLAGS} ${PKG_CFLAGS} ${CFLAGS} -E -xc - >/dev/null 2> configure.log
# 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, EPEL)"
echo " * rpm: $PKG_AMZ_RPM_NAMES (Amazon Linux)"
echo " * csw: $PKG_CSW_NAME (Solaris)"
echo " * brew: $PKG_BREW_NAME (OSX)"
echo "If $PKG_CONFIG_NAME is already installed, check that either:"
echo "(i) 'pkg-config' is in your PATH AND PKG_CONFIG_PATH contains"
echo " a $PKG_CONFIG_NAME.pc file; or"
echo "(ii) 'pg_config' is in your PATH."
echo "If neither can detect $PGK_CONFIG_NAME, you can set INCLUDE_DIR"
echo "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
# Write to Makevars
echo "# Generated from Makevars.in, do not edit by hand" > src/Makevars.new
sed -e "s|@cflags@|$PKG_CFLAGS|" -e "s|@libs@|$PKG_LIBS|" -e "s|@plogr@|$PKG_PLOGR|" src/Makevars.in >> src/Makevars.new
if [ ! -f src/Makevars ] || (which diff > /dev/null && ! diff -q src/Makevars src/Makevars.new); then
cp -f src/Makevars.new src/Makevars
fi
rm -f src/Makevars.new
# Success
exit 0