1 |
#squidf: this spec is heavily inspired by Fedora |
2 |
# |
3 |
%global bundled_gwt_version 2.10.0 |
4 |
%global bundled_websockets_version 1.0.4 |
5 |
%global bundled_gin_version 2.1.2 |
6 |
%global bundled_elemental2_version 1.0.0 |
7 |
%global bundled_junit_version 4.9b3 |
8 |
%global bundled_guice_version 3.0 |
9 |
%global bundled_aopalliance_version 1.0 |
10 |
%global bundled_rapidjson_version 5cd62c2 |
11 |
%global bundled_treehh_version 2.81 |
12 |
%global bundled_sundown_version 1.16.0 |
13 |
%global bundled_synctex_version 1.17 |
14 |
%global bundled_gsllite_version 0.34.0 |
15 |
%global bundled_ace_version 1.32.5 |
16 |
%global bundled_datatables_version 1.10.4 |
17 |
%global bundled_jquery_version 3.5.1 |
18 |
%global bundled_pdfjs_version 1.3.158 |
19 |
%global bundled_revealjs_version 2.4.0 |
20 |
%global bundled_jsbn_version 1.1 |
21 |
%global bundled_highlightjs_version c589dcc |
22 |
%global bundled_qunitjs_version 1.18.0 |
23 |
%global bundled_xtermjs_version 3.14.5 |
24 |
%global bundled_inertpol_version 0.2.5 |
25 |
%global bundled_focusvis_version 5.0.2 |
26 |
%global bundled_jsyaml_version 5.0.2 |
27 |
%global mathjax_short 27 |
28 |
%global rstudio_version_major 2024 |
29 |
%global rstudio_version_minor 04 |
30 |
%global rstudio_version_patch 2 |
31 |
%global rstudio_version_suffix 764 |
32 |
%global rstudio_git_revision_hash e4392fc9ddc21961fd1d0efd47484b43f07a4177 |
33 |
%global rstudio_version %{rstudio_version_major}.%{rstudio_version_minor}.%{rstudio_version_patch} |
34 |
%global rstudio_flags \ |
35 |
export RSTUDIO_VERSION_MAJOR=%{rstudio_version_major} ; \ |
36 |
export RSTUDIO_VERSION_MINOR=%{rstudio_version_minor} ; \ |
37 |
export RSTUDIO_VERSION_PATCH=%{rstudio_version_patch} ; \ |
38 |
export RSTUDIO_VERSION_SUFFIX=+%{rstudio_version_suffix} ; \ |
39 |
export RSTUDIO_GIT_REVISION_HASH=%{rstudio_git_revision_hash} ; \ |
40 |
export GIT_COMMIT=%{rstudio_git_revision_hash} ; \ |
41 |
export PACKAGE_OS=$(cat /etc/mageia-release) |
42 |
|
43 |
# Do not build non-lto objects, as that may result in |
44 |
# memory exhaustion by the linker. |
45 |
%global optflags %(echo '%{optflags}' | sed -e 's!-ffat-lto-objects!-fno-fat-lto-objects!g') |
46 |
|
47 |
Name: rstudio |
48 |
Version: %{rstudio_version}%{?rstudio_version_suffix:+%rstudio_version_suffix} |
49 |
Release: %mkrel 1 |
50 |
Summary: RStudio IDE is a powerful and productive user interface for R |
51 |
Group: Sciences/Mathematics |
52 |
ExcludeArch: %{arm} aarch64 |
53 |
|
54 |
# See NOTICE file |
55 |
License: AGPLv3 |
56 |
URL: https://github.com/rstudio/rstudio |
57 |
Source0: %{url}/archive/v%{version}/%{name}-%{version}.tar.gz |
58 |
Source3: %{name}.metainfo.xml |
59 |
# Unbundle mathjax, pandoc, hunspell dictionaries, qtsingleapplication |
60 |
Patch0: rstudio-2024.04.2-unbundle-dependencies-common.patch |
61 |
Patch1: rstudio-2023.12.1-unbundle-qtsingleapplication.patch |
62 |
# Remove the installation prefix from the exec path in the .desktop file |
63 |
Patch2: rstudio-2023.12.1-fix-rstudio-exec-path.patch |
64 |
# We don't want to set RSTUDIO_PACKAGE_BUILD |
65 |
Patch3: rstudio-2023.12.1-fix-resources-path.patch |
66 |
#squidf: for i586 |
67 |
Patch5: rstudio-2023.12.1-disable-quarto.patch |
68 |
# https://github.com/rstudio/rstudio/issues/9854 |
69 |
# We don't need this with our version of QtWebEngine |
70 |
Patch6: rstudio-2023.12.1-do-not-disable-seccomp-filter-sandbox.patch |
71 |
# Squidf: panmirror from Fedora fails for i586 |
72 |
Patch7: rstudio-2023.12.1-remove-panmirror.patch |
73 |
# adapt to boost 1.85 |
74 |
Patch8: rstudio-2023.12.1-fix-boost-1.85-build.patch |
75 |
|
76 |
BuildRequires: cmake, ant |
77 |
BuildRequires: extra-cmake-modules |
78 |
BuildRequires: java-devel |
79 |
BuildRequires: R-base |
80 |
BuildRequires: yarnpkg, jq |
81 |
BuildRequires: nodejs |
82 |
BuildRequires: mathjax |
83 |
BuildRequires: lato-fonts |
84 |
BuildRequires: soci-postgresql-devel, soci-sqlite3-devel |
85 |
BuildRequires: pkgconfig(appstream-glib) |
86 |
BuildRequires: pkgconfig(pam) |
87 |
BuildRequires: pkgconfig(systemd) |
88 |
BuildRequires: pkgconfig(uuid) |
89 |
BuildRequires: pkgconfig(openssl) |
90 |
BuildRequires: cmake(boost) |
91 |
BuildRequires: cmake(yaml-cpp) |
92 |
BuildRequires: cmake(websocketpp) |
93 |
BuildRequires: cmake(fmt) |
94 |
BuildRequires: cmake(tl-expected) |
95 |
BuildRequires: cmake(Qt5Location) |
96 |
BuildRequires: cmake(Qt5OpenGL) |
97 |
BuildRequires: cmake(Qt5Sensors) |
98 |
BuildRequires: cmake(Qt5Sql) |
99 |
BuildRequires: cmake(Qt5Svg) |
100 |
BuildRequires: cmake(Qt5WebEngine) |
101 |
BuildRequires: cmake(Qt5WebChannel) |
102 |
BuildRequires: cmake(Qt5Xml) |
103 |
BuildRequires: cmake(Qt5XmlPatterns) |
104 |
BuildRequires: qtsingleapplication-qt5-devel |
105 |
BuildRequires: rapidxml-devel |
106 |
BuildRequires: hicolor-icon-theme |
107 |
|
108 |
Requires: hunspell |
109 |
Requires: R-base |
110 |
Requires: rstudio-common |
111 |
|
112 |
Provides: bundled(gwt) = %{bundled_gwt_version} |
113 |
Provides: bundled(gwt-websockets) = %{bundled_websockets_version} |
114 |
Provides: bundled(gin) = %{bundled_gin_version} |
115 |
Provides: bundled(elemental2) = %{bundled_elemental2_version} |
116 |
Provides: bundled(junit) = %{bundled_junit_version} |
117 |
Provides: bundled(guice) = %{bundled_guice_version} |
118 |
Provides: bundled(aopalliance) = %{bundled_aopalliance_version} |
119 |
Provides: bundled(rapidjson-devel) = %{bundled_rapidjson_version} |
120 |
Provides: bundled(tree-hh-devel) = %{bundled_treehh_version} |
121 |
Provides: bundled(sundown) = %{bundled_sundown_version} |
122 |
Provides: bundled(synctex) = %{bundled_synctex_version} |
123 |
Provides: bundled(guidelines-support-library-lite-devel) = %{bundled_gsllite_version} |
124 |
Provides: bundled(js-ace) = %{bundled_ace_version} |
125 |
Provides: bundled(js-datatables) = %{bundled_datatables_version} |
126 |
Provides: bundled(js-jquery) = %{bundled_jquery_version} |
127 |
Provides: bundled(js-pdf) = %{bundled_pdfjs_version} |
128 |
Provides: bundled(js-reveal) = %{bundled_revealjs_version} |
129 |
Provides: bundled(js-bn) = %{bundled_jsbn_version} |
130 |
Provides: bundled(js-highlight) = %{bundled_highlightjs_version} |
131 |
Provides: bundled(js-qunit) = %{bundled_qunitjs_version} |
132 |
Provides: bundled(js-xterm) = %{bundled_xtermjs_version} |
133 |
Provides: bundled(js-inert-polyfill) = %{bundled_inertpol_version} |
134 |
Provides: bundled(js-focus-visible) = %{bundled_focusvis_version} |
135 |
Provides: bundled(js-yaml) = %{bundled_jsyaml_version} |
136 |
|
137 |
%description |
138 |
This package provides the Desktop version, to access the RStudio IDE locally. |
139 |
|
140 |
|
141 |
%package common |
142 |
Summary: RStudio base package |
143 |
Group: Sciences/Mathematics |
144 |
Requires: R-base |
145 |
Requires(post): systemd >= %{systemd_required_version} |
146 |
Requires: hicolor-icon-theme, shared-mime-info |
147 |
|
148 |
%description common |
149 |
RStudio is an integrated development environment (IDE) for the R programming |
150 |
language. Some of its features include: |
151 |
|
152 |
- Customizable workbench with all of the tools required to work with R in one |
153 |
place (console, source, plots, workspace, help, history, etc.). |
154 |
- Syntax highlighting editor with code completion. |
155 |
- Execute code directly from the source editor (line, selection, or file). |
156 |
- Full support for authoring Sweave and TeX documents. |
157 |
- Runs on all major platforms (Windows, Mac, and Linux) and can also be run |
158 |
as a server, enabling multiple users to access the RStudio IDE using a web |
159 |
browser. |
160 |
|
161 |
This package provides common files for %{name} and %{name}-server. |
162 |
|
163 |
|
164 |
%package server |
165 |
Summary: Access RStudio via a web browser |
166 |
Group: Sciences/Mathematics |
167 |
Requires: R-base |
168 |
Requires: rstudio-common |
169 |
Requires(post): rpm-helper >= %{rpmhelper_required_version} |
170 |
Requires(preun): rpm-helper >= %{rpmhelper_required_version} |
171 |
|
172 |
%description server |
173 |
This package provides the Server version, a browser-based interface to the RStudio IDE. |
174 |
|
175 |
|
176 |
%prep |
177 |
%autosetup -p1 -n %{name}-%{rstudio_version}-%{rstudio_version_suffix} |
178 |
|
179 |
# use system libraries when available |
180 |
rm -rf src/cpp/desktop/3rdparty src/cpp/ext/{websocketpp,fmt,expected} |
181 |
sed -i '/fmt/d' src/cpp/ext/CMakeLists.txt |
182 |
sed -i '/target_link_libraries(rstudio-core/i find_package(fmt REQUIRED)' \ |
183 |
src/cpp/core/CMakeLists.txt |
184 |
ln -sf %{_includedir}/rapidxml.h src/cpp/core/include/core/rapidxml/rapidxml.hpp |
185 |
ln -sf %{_includedir}/websocketpp src/cpp/ext/websocketpp |
186 |
ln -sf %{_includedir}/tl src/cpp/ext/expected |
187 |
|
188 |
%build |
189 |
%{rstudio_flags} |
190 |
%cmake -B build \ |
191 |
-DRSTUDIO_TARGET=Desktop \ |
192 |
-DRSTUDIO_DESKTOP=TRUE \ |
193 |
-DQUARTO_ENABLED=FALSE \ |
194 |
-DQT_QMAKE_EXECUTABLE=%{_qt5_bindir}/qmake \ |
195 |
-DRSTUDIO_DISABLE_CHECK_FOR_UPDATES=1 \ |
196 |
-DRSTUDIO_SERVER=TRUE \ |
197 |
-DCMAKE_BUILD_TYPE=Release \ |
198 |
-DRSTUDIO_USE_SYSTEM_SOCI=Yes \ |
199 |
-DRSTUDIO_USE_SYSTEM_BOOST=Yes \ |
200 |
-DRSTUDIO_USE_SYSTEM_YAML_CPP=Yes \ |
201 |
-DBOOST_ROOT=%{_prefix} \ |
202 |
-DRSTUDIO_BOOST_REQUESTED_VERSION=1.85.0 \ |
203 |
-DCMAKE_INSTALL_PREFIX=%{_libdir}/%{name} |
204 |
%make_build -C build # ALL |
205 |
|
206 |
%install |
207 |
%{rstudio_flags} |
208 |
%make_install -C build |
209 |
# expose symlinks in /usr/bin |
210 |
install -d -m 0755 %{buildroot}%{_bindir} |
211 |
ln -s %{_libdir}/%{name}/bin/%{name} %{buildroot}%{_bindir}/%{name} |
212 |
for bin in %{name}-server rserver rserver-pam; do |
213 |
ln -s %{_libdir}/%{name}/bin/${bin} %{buildroot}%{_bindir}/${bin} |
214 |
done |
215 |
|
216 |
#squidf: install desktop file with same categories than R-base |
217 |
desktop-file-install \ |
218 |
--add-category="Science;Math" \ |
219 |
--remove-category="Development;IDE" \ |
220 |
--dir=%{buildroot}%{_datadir}/applications \ |
221 |
%{buildroot}%{_datadir}/applications/%{name}.desktop |
222 |
|
223 |
mkdir -p %{buildroot}%{_metainfodir} |
224 |
install -m 0644 %{SOURCE3} %{buildroot}%{_metainfodir}/ |
225 |
appstream-util validate-relax --nonet %{buildroot}%{_metainfodir}/%{name}.metainfo.xml |
226 |
|
227 |
# create required directories for rstudio-server (according to INSTALL) |
228 |
mkdir -p %{buildroot}%{_sharedstatedir}/%{name}-server |
229 |
|
230 |
# install the systemd service file and change /var/run -> /run |
231 |
install -D -m 0644 \ |
232 |
%{buildroot}%{_libdir}/%{name}/extras/systemd/%{name}-server.service \ |
233 |
%{buildroot}%{_unitdir}/%{name}-server.service |
234 |
sed -i 's@/var/run@/run@g' %{buildroot}%{_unitdir}/%{name}-server.service |
235 |
|
236 |
# install the PAM module |
237 |
mkdir -p %{buildroot}%{_sysconfdir}/pam.d |
238 |
install -m 0644 \ |
239 |
%{buildroot}%{_libdir}/%{name}/extras/pam/%{name} \ |
240 |
%{buildroot}%{_sysconfdir}/pam.d/%{name} |
241 |
|
242 |
# symlink the location where the bundled dependencies should be |
243 |
pushd %{buildroot}%{_libdir}/%{name}/bin |
244 |
ln -sf %{_bindir}/node node |
245 |
popd |
246 |
pushd %{buildroot}%{_libdir}/%{name}/resources |
247 |
ln -sf %{_datadir}/hunspell dictionaries |
248 |
ln -sf %{_datadir}/javascript/mathjax mathjax-%{mathjax_short} |
249 |
pushd presentation/revealjs/fonts |
250 |
for fnt in Lato*.ttf; do |
251 |
ln -sf %{_datadir}/fonts/lato/${fnt} ${fnt} |
252 |
done |
253 |
popd |
254 |
# move and symlink bundled libraries |
255 |
mv grid/datatables grid/datatables.bundled |
256 |
ln -sf ./datatables.bundled grid/datatables |
257 |
mv pdfjs pdfjs.bundled |
258 |
ln -sf ./pdfjs.bundled pdfjs |
259 |
mv presentation/revealjs presentation/revealjs.bundled |
260 |
ln -sf ./revealjs.bundled presentation/revealjs |
261 |
popd |
262 |
|
263 |
# clean up |
264 |
pushd %{buildroot}%{_libdir}/%{name} |
265 |
for f in .gitignore .Rbuildignore LICENSE README; do |
266 |
find . -name ${f} -delete |
267 |
done |
268 |
rm -rf {extras,INSTALL,COPYING,NOTICE,README.md,SOURCE,VERSION} |
269 |
popd |
270 |
|
271 |
#squidf: clean deprecated directories |
272 |
# Can be removed with MGA11 |
273 |
%pretrans -p <lua> |
274 |
path = "%{_libdir}/%{name}/resources/dictionaries" |
275 |
st = posix.stat(path) |
276 |
if st and st.type == "directory" then |
277 |
status = os.rename(path, path .. ".rpmmoved") |
278 |
if not status then |
279 |
suffix = 0 |
280 |
while not status do |
281 |
suffix = suffix + 1 |
282 |
status = os.rename(path .. ".rpmmoved", path .. ".rpmmoved." .. suffix) |
283 |
end |
284 |
os.rename(path, path .. ".rpmmoved") |
285 |
end |
286 |
end |
287 |
|
288 |
path = "%{_libdir}/%{name}/resources/grid/datatables" |
289 |
st = posix.stat(path) |
290 |
if st and st.type == "directory" then |
291 |
status = os.rename(path, path .. ".rpmmoved") |
292 |
if not status then |
293 |
suffix = 0 |
294 |
while not status do |
295 |
suffix = suffix + 1 |
296 |
status = os.rename(path .. ".rpmmoved", path .. ".rpmmoved." .. suffix) |
297 |
end |
298 |
os.rename(path, path .. ".rpmmoved") |
299 |
end |
300 |
end |
301 |
|
302 |
path = "%{_libdir}/%{name}/resources/presentation/revealjs" |
303 |
st = posix.stat(path) |
304 |
if st and st.type == "directory" then |
305 |
status = os.rename(path, path .. ".rpmmoved") |
306 |
if not status then |
307 |
suffix = 0 |
308 |
while not status do |
309 |
suffix = suffix + 1 |
310 |
status = os.rename(path .. ".rpmmoved", path .. ".rpmmoved." .. suffix) |
311 |
end |
312 |
os.rename(path, path .. ".rpmmoved") |
313 |
end |
314 |
end |
315 |
|
316 |
path = "%{_libdir}/%{name}/resources/pdfjs" |
317 |
st = posix.stat(path) |
318 |
if st and st.type == "directory" then |
319 |
status = os.rename(path, path .. ".rpmmoved") |
320 |
if not status then |
321 |
suffix = 0 |
322 |
while not status do |
323 |
suffix = suffix + 1 |
324 |
status = os.rename(path .. ".rpmmoved", path .. ".rpmmoved." .. suffix) |
325 |
end |
326 |
os.rename(path, path .. ".rpmmoved") |
327 |
end |
328 |
end |
329 |
|
330 |
%pre server |
331 |
# add user rstudio-server |
332 |
%_pre_useradd %{name}-server %{_localstatedir}/lib/%{name}-server /bin/false |
333 |
|
334 |
%post server |
335 |
%_tmpfilescreate %{_tmpfilesdir}/%{name}-server |
336 |
%_post_service %{name}-server |
337 |
|
338 |
%preun server |
339 |
%_preun_service %{name}-server |
340 |
|
341 |
%postun server |
342 |
%_postun_userdel %{name}-server |
343 |
|
344 |
%triggerun server -- %{name}-server |
345 |
chown -R %{name}-server:%{name}-server %{_sharedstatedir}/%{name}-server |
346 |
|
347 |
%files |
348 |
%{_bindir}/%{name} |
349 |
%dir %{_libdir}/%{name} |
350 |
%{_libdir}/%{name}/R |
351 |
%dir %{_libdir}/%{name}/bin |
352 |
%{_libdir}/%{name}/bin/node |
353 |
%{_libdir}/%{name}/bin/postback |
354 |
%{_libdir}/%{name}/bin/r-ldpath |
355 |
%{_libdir}/%{name}/bin/rpostback |
356 |
%{_libdir}/%{name}/bin/rsession |
357 |
%{_libdir}/%{name}/resources |
358 |
%{_libdir}/%{name}/www |
359 |
%{_libdir}/%{name}/www-symbolmaps |
360 |
|
361 |
%files common |
362 |
%license COPYING NOTICE |
363 |
%doc README.md |
364 |
%{_libdir}/%{name}/%{name}.png |
365 |
%{_libdir}/%{name}/bin/diagnostics |
366 |
%{_libdir}/%{name}/bin/%{name} |
367 |
%{_libdir}/%{name}/bin/%{name}-backtrace.sh |
368 |
%{_datadir}/applications/%{name}.desktop |
369 |
%{_datadir}/icons/hicolor/*/apps/* |
370 |
%{_datadir}/icons/hicolor/*/mimetypes/* |
371 |
%{_datadir}/mime/packages/%{name}.xml |
372 |
%{_datadir}/pixmaps/%{name}.png |
373 |
%{_metainfodir}/%{name}.metainfo.xml |
374 |
|
375 |
%files server |
376 |
%{_bindir}/%{name}-server |
377 |
%{_bindir}/rserver |
378 |
%{_bindir}/rserver-pam |
379 |
%{_libdir}/%{name}/bin/crash-handler-proxy |
380 |
%{_libdir}/%{name}/bin/rserver |
381 |
%{_libdir}/%{name}/bin/rserver-pam |
382 |
%{_libdir}/%{name}/bin/rserver-url |
383 |
%{_libdir}/%{name}/bin/%{name}-server |
384 |
%{_libdir}/%{name}/db |
385 |
%dir %{_sharedstatedir}/%{name}-server |
386 |
%{_unitdir}/%{name}-server.service |
387 |
%config(noreplace) %{_sysconfdir}/pam.d/%{name} |