aboutsummaryrefslogtreecommitdiff
path: root/devel/RStudio/Makefile
blob: 9b17c8aa72ed2a61acfd6c73b5660bcc0c659b84 (plain) (blame)
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
# This port opens too many files during build, more than the default setting.
# Its build is known to succeed with MAX_FILES_RStudio=4096 and MAX_FILES_RStudio_server=4096 in poudriere.conf

PORTNAME=	RStudio
DISTVERSIONPREFIX=	v
DISTVERSION=	1.4.1717
PORTREVISION=	1
CATEGORIES=	devel math java
MASTER_SITES=	https://s3.amazonaws.com/rstudio-buildtools/dictionaries/:dictionaries \
		https://s3.amazonaws.com/rstudio-buildtools/:buildtools
DISTFILES=	core-dictionaries.zip:dictionaries \
		gin-${GIN_VERSION}.zip:buildtools \
		gwt-${GWT_VERSION}.zip:buildtools \
		mathjax-27.zip:buildtools

MAINTAINER=	yuri@FreeBSD.org
COMMENT=	Integrated development environment (IDE) for R

LICENSE=	GPLv3
LICENSE_FILE=	${WRKSRC}/COPYING

BROKEN_i386=	[ERROR] Line 101: Failed to resolve 'org.rstudio.studio.client.workbench.views.vcs.common.diff.LineActionButtonRenderer.GrayResources' via deferred binding

BUILD_DEPENDS=	ant:devel/apache-ant \
		${LOCALBASE}/include/sys/sysinfo.h:devel/libsysinfo \
		node:www/node \
		pandoc:textproc/hs-pandoc \
		R-cran-rstudioapi>0:devel/R-cran-rstudioapi
LIB_DEPENDS=	libR.so:math/R \
		libboost_thread.so:devel/boost-libs \
		libinotify.so:devel/libinotify \
		libsoci_core.so:databases/soci \
		libuuid.so:misc/e2fsprogs-libuuid \
		libyaml-cpp.so:devel/yaml-cpp

FLAVORS=	desktop server
FLAVOR?=	${FLAVORS:[1]}
server_PKGNAMESUFFIX=	-server

USES=		cmake fortran localbase:ldflags pgsql pkgconfig sqlite ssl
USE_JAVA=	yes
JAVA_VERSION=	8
JAVA_BUILD=	yes
USE_GITHUB=	yes
GH_PROJECT=	${PORTNAME:tl}
GH_TUPLE=	rstudio:r2d3:v0.2.0:r2d3/dependencies/common/r2d3 \
		rstudio:rmarkdown:aed26ac:rmarkdown/dependencies/common/rmarkdown \
		rstudio:rsconnect:03c379b:rsconnect/dependencies/common/rsconnect \
		trestletech:plumber:v0.4.6:plumber/dependencies/common/plumber

CMAKE_ARGS=	-DFREEBSD_RSTUDIO_VERSION:STRING=${PORTVERSION} \
		-DFREEBSD_LIBDIR:STRING=${PREFIX}/lib
CMAKE_ARGS+=	-DQT_QMAKE_EXECUTABLE:STRING=${QMAKE}
CMAKE_ARGS+=	-DRSTUDIO_BOOST_SIGNALS_VERSION=2
CMAKE_ARGS+=	-DFREEBSD_PORT_VERSION:STRING=${DISTVERSION}
CMAKE_ARGS+=	-DFREEBSD_LOCALBASE:STRING=${LOCALBASE} # SOCI package is looked up here, see patch patch-src_cpp_CMakeLists.txt
CMAKE_ON=	RSTUDIO_USE_SYSTEM_YAML_CPP \
		RSTUDIO_USE_SYSTEM_SOCI
MAKE_ENV=	HOME=${WRKDIR} \
		JAVA_HOME=${JAVA_HOME} \
		PATH=${JAVA_HOME}/bin:${PATH} \
		ANT_OPTS="-Duser.home=${WRKDIR}"

GWT_VERSION=	2.8.1
GIN_VERSION=	2.1.2

.if ${FLAVOR:U} == desktop
DEPRECATED=	Uses EOL Python 2.7 via www/qt5-webengine
EXPIRATION_DATE=2021-06-23
COMMENT+=	(desktop UI version)
USES+=		desktop-file-utils qt:5 shared-mime-info
USE_QT=		core dbus declarative gui location network opengl printsupport quickcontrols sensors \
		sql svg webchannel webengine webkit widgets xml xmlpatterns buildtools_build qmake_build
CMAKE_ARGS+=	-DRSTUDIO_TARGET=Desktop
INSTALL_SUBDIR=	${PORTNAME:tl}
EXECUTABLE=	${PORTNAME:tl}
.endif

.if ${FLAVOR:U} == server
COMMENT+=	(web UI version)
CMAKE_ARGS+=	-DRSTUDIO_TARGET=Server
LDFLAGS+=	-linotify
INSTALL_SUBDIR=	${PORTNAME:tl}-server
EXECUTABLE=	rserver
USER=		nobody
SUB_LIST=	USER=${USER}
USE_RC_SUBR=	${PORTNAME:tl}-server
.endif

post-extract:
	@${MKDIR} ${WRKSRC}/dependencies/dictionaries && ${MV} ${WRKDIR}/en_* ${WRKSRC}/dependencies/dictionaries/
	@${MV} ${WRKDIR}/mathjax-* ${WRKSRC}/dependencies/
	@${MKDIR} ${WRKSRC}/src/gwt/lib/gwt && ${MV} ${WRKDIR}/gwt-${GWT_VERSION} ${WRKSRC}/src/gwt/lib/gwt/${GWT_VERSION}
	@${MKDIR} ${WRKSRC}/src/gwt/lib/gin/${GIN_VERSION} && ${MV} ${WRKDIR}/*.jar ${WRKSRC}/src/gwt/lib/gin/${GIN_VERSION}/

post-patch:
	@${REINPLACE_CMD} -e ' \
		s|target_link_libraries(rstudio|target_link_libraries(rstudio procstat|; \
		s|get_filename_component|#get_filename_component|; \
		s|set(CMAKE_PREFIX_PATH "$${QT_BIN_DIR}//..//lib//cmake")|set(CMAKE_PREFIX_PATH "${LOCALBASE}/lib/cmake")|; \
		s|/usr/share/|${PREFIX}/share/|g' \
		${WRKSRC}/src/cpp/desktop/CMakeLists.txt
	@${REINPLACE_CMD} -e ' \
		s|</java>|<jvmarg value="-Duser.home=${WRKDIR}"/></java>|' \
		${WRKSRC}/src/gwt/build.xml
	@${REINPLACE_CMD} -e ' \
		s|rHomePaths.push_back|//rHomePaths.push_back|; \
		s|//rHomePaths.push_back(FilePath("/usr/local/lib/|rHomePaths.push_back(FilePath("${PREFIX}/lib/|' \
		${WRKSRC}/src/cpp/core/r_util/RVersionsPosix.cpp
	@${REINPLACE_CMD} -e ' \
		s|<condition property="node.bin" value="../../../$${node.dir}/bin/node">|<condition property="node.bin" value="${LOCALBASE}/bin/node">|' \
		${WRKSRC}/src/gwt/build.xml

pre-build:
	@${CP} ${FILESDIR}/global-setenv.h ${WRKSRC}/src/cpp/desktop/
	@${REINPLACE_CMD} -e 's|%%PREFIX%%|${PREFIX}|g' ${WRKSRC}/src/cpp/desktop/global-setenv.h

post-install:
	@(echo "#!/bin/sh"; \
	  echo ""; \
	  echo "if ! [ -d /proc/curproc ]; then"; \
	  echo "  echo \"${PORTNAME} needs /proc to be mounted as procfs\" >&2"; \
	  echo "  exit 1"; \
	  echo "fi"; \
	  echo ""; \
	  echo "# workaround for the problem that RStudio passes /lib with LD_LIBRARY_PATH that causes the /lib/libgcc_s.so.1 conflict with gcc"; \
	  echo "LD_PRELOAD=${PREFIX}/lib/gcc${GCC_DEFAULT}/libgcc_s.so JAVA_HOME=${JAVA_HOME} ${PREFIX}/lib/${INSTALL_SUBDIR}/bin/${EXECUTABLE} \"$$"@"\"" \
	) > ${STAGEDIR}${PREFIX}/bin/${EXECUTABLE}
	@${CHMOD} +x ${STAGEDIR}${PREFIX}/bin/${EXECUTABLE}
.if ${FLAVOR:U} == desktop
	${REINPLACE_CMD} -e 's|^Exec=.*/rstudio|Exec=${PREFIX}/bin/${EXECUTABLE}|' ${STAGEDIR}${PREFIX}/share/applications/${EXECUTABLE}.desktop
.endif
.if ${FLAVOR:U} == server
	${RM} ${STAGEDIR}${LOCALBASE}/lib/${INSTALL_SUBDIR}/bin/rstudio-server # not compatible with FreeBSD
.endif
	# Some functions expect the pandoc symlink.
	@${MKDIR} ${STAGEDIR}${PREFIX}/lib/${INSTALL_SUBDIR}/bin/pandoc
	@cd ${STAGEDIR}${PREFIX}/lib/${INSTALL_SUBDIR}/bin/pandoc && ${LN} -s ../../../../bin/pandoc
	# There is a variability in .js file names due to use of random numbers, so we use the automatic plist.
	@${SETENV} ${CO_ENV} ${SH} ${SCRIPTSDIR}/check-stagedir.sh makeplist | ${GREP} -v ^\/ | ${SED} -e 's|%%WWWDIR%%|www/rstudio| ; s|%%CMAKE_BUILD_TYPE%%|${CMAKE_BUILD_TYPE:tl}|' > ${TMPPLIST}

.include <bsd.port.mk>