Skip to content

Commit 4d9b84c

Browse files
authored
Merge pull request #102 from swift-lang/autodetect_rcpp_rinside
Autodetect rcpp rinside
2 parents 3609cc2 + 9ac2f61 commit 4d9b84c

File tree

5 files changed

+141
-32
lines changed

5 files changed

+141
-32
lines changed

dev/build/.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,3 @@
11
install.txt
22
exm-settings.sh
3+
swift-t-settings.sh

dev/build/swift-t-settings.sh.template

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -57,11 +57,18 @@ MPI_VERSION=3
5757

5858
# Enable Python integration
5959
# ENABLE_PYTHON=1
60-
# PYTHON_INSTALL=/usr/
60+
# PYTHON_INSTALL=/path/to/python
61+
# PYTHON_VERSION_MAJOR=2
62+
# PYTHON_VERSION_MINOR=7
63+
# PYTHON_VERSION_SUFFIX=m
6164

6265
# Enable R integration
6366
# ENABLE_R=1
64-
# R_INSTALL=/usr/
67+
# R_INSTALL=/path/to/R
68+
# Define these if Rcpp and RInside are not
69+
# autodetected
70+
# RCPP_INSTALL=/path/to/Rcpp
71+
# RINSIDE_INSTALL=/path/to/RInside
6572

6673
# Enable Julia integration
6774
# ENABLE_JULIA=1

dev/build/turbine-build.sh

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,13 +46,33 @@ if [ ! -z "$PYTHON_INSTALL" ]; then
4646
EXTRA_ARGS+=" --with-python=${PYTHON_INSTALL}"
4747
fi
4848

49+
if [ ! -z "$PYTHON_VERSION_MAJOR" ]; then
50+
EXTRA_ARGS+=" --with-python-version-major=${PYTHON_VERSION_MAJOR}"
51+
fi
52+
53+
if [ ! -z "$PYTHON_VERSION_MINOR" ]; then
54+
EXTRA_ARGS+=" --with-python-version-minor=${PYTHON_VERSION_MINOR}"
55+
fi
56+
57+
if [ ! -z "$PYTHON_VERSION_SUFFIX" ]; then
58+
EXTRA_ARGS+=" --with-python-version-suffix=${PYTHON_VERSION_SUFFIX}"
59+
fi
60+
4961
if (( ENABLE_R )); then
5062
EXTRA_ARGS+=" --enable-r"
5163
fi
5264
if [ ! -z "$R_INSTALL" ]; then
5365
EXTRA_ARGS+=" --with-r=${R_INSTALL}"
5466
fi
5567

68+
if [ ! -z "$RINSIDE_INSTALL" ]; then
69+
EXTRA_ARGS+=" --with-rinside=${RINSIDE_INSTALL}"
70+
fi
71+
72+
if [ ! -z "$RCPP_INSTALL" ]; then
73+
EXTRA_ARGS+=" --with-rcpp=${RCPP_INSTALL}"
74+
fi
75+
5676
if (( ENABLE_JULIA )); then
5777
if [ ! -z "$JULIA_INSTALL" ]; then
5878
EXTRA_ARGS+=" --with-julia=${JULIA_INSTALL}"

turbine/code/Makefile.in

Lines changed: 39 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -248,6 +248,8 @@ USE_PYTHON_NAME = @USE_PYTHON_NAME@
248248

249249
HAVE_R = @HAVE_R@
250250
USE_R = @USE_R@
251+
RCPP_PATH = @RCPP_PATH@
252+
RINSIDE_PATH = @RINSIDE_PATH@
251253

252254
HAVE_JULIA = @HAVE_JULIA@
253255
USE_JULIA = @USE_JULIA@
@@ -277,10 +279,18 @@ ifeq ($(HAVE_PYTHON),1)
277279
endif
278280
ifeq ($(HAVE_R),1)
279281
ifneq ($(USE_R),)
280-
INCLUDES += -I $(USE_R)/include
281-
R_LIBRARY = $(USE_R)/library
282-
INCLUDES += -I $(R_LIBRARY)/RInside/include
283-
INCLUDES += -I $(R_LIBRARY)/Rcpp/include
282+
INCLUDES += -I $(USE_R)/include
283+
R_LIBRARY = $(USE_R)/library
284+
ifneq ($(RINSIDE_PATH),)
285+
INCLUDES += -I $(RINSIDE_PATH)/include
286+
else
287+
INCLUDES += -I $(R_LIBRARY)/RInside/include
288+
endif
289+
ifneq ($(RCPP_PATH),)
290+
INCLUDES += -I $(RCPP_PATH)/include
291+
else
292+
INCLUDES += -I $(R_LIBRARY)/Rcpp/include
293+
endif
284294
endif
285295
endif
286296
ifeq ($(HAVE_JULIA),1)
@@ -336,14 +346,33 @@ endif
336346
ifeq ($(HAVE_R),1)
337347
ifneq ($(USE_R),)
338348
R_LIB = $(USE_R)/lib
339-
ifeq ($(filter $(R_LIB),$(SYSTEM_LIBS)),)
340-
LIBS += -L$(R_LIB)
341-
RPATH_R = yes
349+
LIBS += -L$(R_LIB)
350+
RPATH_R = yes
351+
ifneq ($(RINSIDE_PATH),)
352+
RINSIDE_LIB = $(RINSIDE_PATH)/lib
353+
else
354+
RINSIDE_LIB = $(USE_R)/library/RInside/lib
342355
endif
343-
RINSIDE_LIB = $(USE_R)/library/RInside/lib
344356
LIBS += -L$(RINSIDE_LIB)
345357
endif
346358
LIBS += -lRInside -lR
359+
360+
ifeq ($(USE_MAC),yes)
361+
# if mac, the RInside library and python install name can be incorrect
362+
# when installed locally. This will fix that in tclturbine
363+
RINSIDE_INSTALL_NAME=$(shell otool -D $(RINSIDE_PATH)/lib/libRInside.dylib | sed -n 2p)
364+
FIX_RINSIDE_INSTALL_NAME = install_name_tool -change $(RINSIDE_INSTALL_NAME) $(RINSIDE_LIB)/libRInside.dylib $(TCL_TURBINE_SO)
365+
366+
ifneq ($(USE_PYTHON_LIBDIR),)
367+
PYTHON_LIB_NAME = $(USE_PYTHON_LIBDIR)/lib$(USE_PYTHON_NAME).dylib
368+
PYTHON_INSTALL_NAME = $(shell otool -D $(PYTHON_LIB_NAME) | sed -n 2p)
369+
FIX_PYTHON_INSTALL_NAME = install_name_tool -change $(PYTHON_INSTALL_NAME) $(PYTHON_LIB_NAME) $(TCL_TURBINE_SO)
370+
endif
371+
else
372+
FIX_RINSIDE_INSTALL_NAME =
373+
FIX_PYTHON_INSTALL_NAME =
374+
endif
375+
347376
endif
348377
ifeq ($(HAVE_JVM_SCRIPT),1)
349378
SWIFTTJVM_LIB = $(USE_JVM_SCRIPT_HOME)/src
@@ -562,6 +591,8 @@ endif
562591
$(LIBS) \
563592
$(RPATHS) \
564593
$(MAC_NAME)
594+
$(FIX_RINSIDE_INSTALL_NAME)
595+
$(FIX_PYTHON_INSTALL_NAME)
565596

566597
$(STATIC_PKG_A): $(STATIC_PKG_OBJS) $(STATIC_PKG_RESOURCE_O)
567598
$(Q) " AR $(@)"

turbine/code/configure.ac

Lines changed: 72 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -180,7 +180,7 @@ AC_MSG_CHECKING([checking for ${USE_C_UTILS}/lib/libexmcutils.${AR_SUFFIX}])
180180
if [[ -f "${USE_C_UTILS}/lib/libexmcutils.${AR_SUFFIX}" ]]; then
181181
USE_LIBCUTILS_A="${USE_C_UTILS}/lib/libexmcutils.${AR_SUFFIX}"
182182
AC_MSG_RESULT([yes])
183-
else
183+
else
184184
AC_MSG_RESULT([no])
185185
fi
186186
AC_SUBST(USE_LIBCUTILS_A)
@@ -688,37 +688,94 @@ fi
688688
# R is optional
689689
HAVE_R=0
690690
USE_R=0
691-
AC_ARG_ENABLE(r,
691+
RCPP_PATH=0
692+
RINSIDE_PATH=0
693+
AC_ARG_ENABLE(r, # Drop this? Almost guaranteed to fail.
692694
AS_HELP_STRING([--enable-r],
693695
[Enable calling R language]),
694696
[
695697
HAVE_R=1
696-
USE_R=""
698+
USE_R="/usr" # Acceptable default?
697699
])
698700

701+
AC_ARG_WITH(rinside,
702+
AS_HELP_STRING([--with-rinside],
703+
[Use this RInside directory]),
704+
[
705+
HAVE_R=1
706+
RINSIDE_PATH=${withval}
707+
])
708+
709+
AC_ARG_WITH(rcpp,
710+
AS_HELP_STRING([--with-rcpp],
711+
[Use this Rcpp directory]),
712+
[
713+
HAVE_R=1
714+
RCPP_PATH=${withval}
715+
])
716+
699717
AC_ARG_WITH(r,
700718
AS_HELP_STRING([--with-r],
701719
[Use this R directory]),
702720
[
703721
HAVE_R=1
704722
USE_R=${withval}
705-
AC_CHECK_FILE(${USE_R}/include/R.h, [],
706-
[AC_MSG_ERROR([Could not find R header!])])
707-
# C++ is only required if we enable R
708-
AC_PROG_CXX
709-
LD=${CXX}
710723
])
711724

725+
if [[ ${HAVE_R} == 1 ]]
726+
then
727+
AC_CHECK_FILE(${USE_R}/include/R.h, [],
728+
[AC_MSG_ERROR([Could not find R header!])])
729+
if [[ ${RINSIDE_PATH} == 0 ]]
730+
then
731+
AC_CHECK_PROG(RSCRIPT, Rscript, Rscript)
732+
if [[ ! -z ${RSCRIPT} ]]
733+
then
734+
R_LIB_PATHS=" ${USE_R} "
735+
# returned in order of precedence so we want to
736+
# reverse so that the last overrides the first
737+
R_LIB_PATHS+="$(Rscript -e 'cat(rev(.libPaths()))')"
738+
for p in $R_LIB_PATHS
739+
do
740+
AC_CHECK_FILE(${p}/RInside, [RINSIDE_PATH=${p}/RInside], [])
741+
done
742+
else
743+
RINSIDE_PATH=${USE_R}/RInside
744+
fi
745+
fi
746+
747+
if [[ ${RCPP_PATH} == 0 ]]
748+
then
749+
AC_CHECK_PROG(RSCRIPT, Rscript, Rscript)
750+
if [[ ! -z ${RSCRIPT} ]]
751+
then
752+
R_LIB_PATHS="${USE_R} "
753+
# returned in order of precedence so we want to
754+
# reverse so that the last overrides the first
755+
R_LIB_PATHS+="$(Rscript -e 'cat(rev(.libPaths()))')"
756+
for p in $R_LIB_PATHS
757+
do
758+
AC_CHECK_FILE(${p}/Rcpp, [RCPP_PATH=${p}/Rcpp], [])
759+
done
760+
else
761+
RCPP_PATH=${USE_R}/Rcpp
762+
fi
763+
fi
764+
765+
AC_CHECK_FILE(${RINSIDE_PATH}/include/RInside.h, [],
766+
[AC_MSG_ERROR([Could not find RInside header!])])
767+
AC_CHECK_FILE(${RCPP_PATH}/include/Rcpp.h, [],
768+
[AC_MSG_ERROR([Could not find Rcpp header!])])
769+
770+
# C++ is only required if we enable R
771+
AC_PROG_CXX
772+
LD=${CXX}
773+
fi # if HAVE_R
712774
AC_DEFINE_UNQUOTED([HAVE_R],$HAVE_R,[Enables R])
713775
AC_SUBST(HAVE_R)
714776
AC_SUBST(USE_R)
715-
716-
if (( HAVE_R ))
717-
then
718-
AC_MSG_RESULT([R enabled])
719-
else
720-
AC_MSG_RESULT([R disabled])
721-
fi
777+
AC_SUBST(RINSIDE_PATH)
778+
AC_SUBST(RCPP_PATH)
722779

723780
# JVM scripting support: Disabled by default
724781
HAVE_JVM_SCRIPT=0
@@ -783,13 +840,6 @@ AC_DEFINE_UNQUOTED(HAVE_JULIA,${HAVE_JULIA},[Enables Julia])
783840
AC_SUBST(HAVE_JULIA)
784841
AC_SUBST(USE_JULIA)
785842

786-
if (( HAVE_JULIA ))
787-
then
788-
AC_MSG_RESULT([Julia enabled])
789-
else
790-
AC_MSG_RESULT([Julia disabled])
791-
fi
792-
793843
HAVE_COASTER=0
794844
USE_COASTER=0
795845
AC_ARG_WITH(coaster,

0 commit comments

Comments
 (0)