Compare commits

2 Commits

Author SHA256 Message Date
544c09a1d0 Try build with bundled node_modules 2025-09-14 17:43:11 +02:00
59abbd66e9 import changes from home:haem/rstudio 2025-09-13 23:10:06 +02:00
28 changed files with 763 additions and 427 deletions

View File

@@ -1,20 +1,17 @@
From 29dab1f5996b759ff3c97362e13a316f25641575 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Dan=20=C4=8Cerm=C3=A1k?= <dcermak@suse.com>
Date: Mon, 13 Jan 2020 11:27:06 +0100
Subject: [PATCH 1/8] Unbundle mathjax and pandoc
From 0e2903f2de5fc939c0d0a6c84b5f7a6cebb8ed77 Mon Sep 17 00:00:00 2001
From: haem <mixosaurus+obs@pm.me>
Date: Fri, 12 Sep 2025 17:16:25 +0200
Subject: [PATCH 01/12] Unbundle mathjax and pandoc
Use find_file() & find_program() functions to find the dependencies in the
dependencies/ subdirectory first. If they are not there, use the system paths
instead.
---
src/cpp/session/CMakeLists.txt | 22 ----------------------
1 file changed, 22 deletions(-)
src/cpp/session/CMakeLists.txt | 27 ---------------------------
1 file changed, 27 deletions(-)
diff --git a/src/cpp/session/CMakeLists.txt b/src/cpp/session/CMakeLists.txt
index 1dfc977..56e2838 100644
index 2bf55f9f..75850da1 100644
--- a/src/cpp/session/CMakeLists.txt
+++ b/src/cpp/session/CMakeLists.txt
@@ -64,28 +64,6 @@ else()
@@ -76,33 +76,6 @@ else()
endif()
@@ -22,7 +19,8 @@ index 1dfc977..56e2838 100644
-foreach(VAR RSTUDIO_DEPENDENCIES_DICTIONARIES_DIR
- RSTUDIO_DEPENDENCIES_MATHJAX_DIR
- RSTUDIO_DEPENDENCIES_PANDOC_DIR
- RSTUDIO_DEPENDENCIES_QUARTO_DIR)
- RSTUDIO_DEPENDENCIES_QUARTO_DIR
- RSTUDIO_DEPENDENCIES_COPILOT_DIR)
-
-
- # skip quarto if not enabled
@@ -30,6 +28,11 @@ index 1dfc977..56e2838 100644
- continue()
- endif()
-
- # skip Copilot if not enabled
- if("${VAR}" STREQUAL "RSTUDIO_DEPENDENCIES_COPILOT_DIR" AND NOT RSTUDIO_ENABLE_COPILOT)
- continue()
- endif()
-
- # validate existence
- if(NOT EXISTS "${${VAR}}")
- message(FATAL_ERROR "${${VAR}} not found (re-run install-dependencies script to install")
@@ -39,10 +42,9 @@ index 1dfc977..56e2838 100644
- set("${VAR}" "${${VAR}}" CACHE INTERNAL "")
-
-endforeach()
-
# verify embedded packages are available
foreach(PKG ${RSTUDIO_EMBEDDED_PACKAGES})
file(GLOB PKG_FILES "${RSTUDIO_DEPENDENCIES_DIR}/common/${PKG}*.tar.gz")
--
2.31.1
2.51.0

View File

@@ -1,19 +1,18 @@
From 9a025e6aaa577dfefa02cc8b25272d454db6dcba Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Dan=20=C4=8Cerm=C3=A1k?= <dcermak@suse.com>
Date: Tue, 14 Jan 2020 14:20:40 +0100
Subject: [PATCH 2/8] Don't install pandoc and mathjax
From cd6b655335f32096f67e97736bc07babb3cdb846 Mon Sep 17 00:00:00 2001
From: haem <mixosaurus+obs@pm.me>
Date: Fri, 12 Sep 2025 17:16:28 +0200
Subject: [PATCH 02/12] Don't install pandoc and mathjax
Because we use the system wide version, there's no need to waste time installing
the files.
shorten the installation time a bit by not installing mathjax
---
src/cpp/session/CMakeLists.txt | 41 -----------------------------------------
1 file changed, 41 deletions(-)
src/cpp/session/CMakeLists.txt | 25 -------------------------
1 file changed, 25 deletions(-)
diff --git a/src/cpp/session/CMakeLists.txt b/src/cpp/session/CMakeLists.txt
index 0202e84..ec525d4 100644
index 75850da1..fa93a1e2 100644
--- a/src/cpp/session/CMakeLists.txt
+++ b/src/cpp/session/CMakeLists.txt
@@ -692,53 +692,12 @@ if(NOT RSTUDIO_SESSION_WIN32 AND NOT RSESSION_ALTERNATE_BUILD)
@@ -694,31 +694,6 @@ if(NOT RSTUDIO_SESSION_WIN32 AND NOT RSESSION_ALTERNATE_BUILD)
install(DIRECTORY "${RSTUDIO_DEPENDENCIES_DICTIONARIES_DIR}"
DESTINATION "${RSTUDIO_INSTALL_SUPPORTING}/resources")
@@ -21,36 +20,15 @@ index 0202e84..ec525d4 100644
- install(DIRECTORY "${RSTUDIO_DEPENDENCIES_MATHJAX_DIR}"
- DESTINATION "${RSTUDIO_INSTALL_SUPPORTING}/resources")
-
# install node
install(
DIRECTORY "${RSTUDIO_DEPENDENCIES_DIR}/common/node/${RSTUDIO_INSTALLED_NODE_VERSION}/"
DESTINATION "${RSTUDIO_INSTALL_BIN}/node"
USE_SOURCE_PERMISSIONS)
- # install quarto (or pandoc if quarto disabled)
- if(QUARTO_ENABLED)
- # install some quarto folders into Resources, as needed
- if(APPLE)
- if (RSTUDIO_ELECTRON)
- install(DIRECTORY "${RSTUDIO_DEPENDENCIES_QUARTO_DIR}"
- DESTINATION "${RSTUDIO_INSTALL_RESOURCES}/app"
- USE_SOURCE_PERMISSIONS
- PATTERN ".gitignore"
- EXCLUDE)
- else()
- install(DIRECTORY "${RSTUDIO_DEPENDENCIES_QUARTO_DIR}"
- DESTINATION "${RSTUDIO_INSTALL_BIN}"
- USE_SOURCE_PERMISSIONS
- PATTERN "*/share"
- EXCLUDE
- PATTERN ".gitignore"
- EXCLUDE)
- install(DIRECTORY "${RSTUDIO_DEPENDENCIES_QUARTO_DIR}/share"
- DESTINATION "${RSTUDIO_INSTALL_SUPPORTING}/quarto"
- USE_SOURCE_PERMISSIONS
- PATTERN ".gitignore"
- EXCLUDE)
- endif()
- install(DIRECTORY "${RSTUDIO_DEPENDENCIES_QUARTO_DIR}"
- DESTINATION "${RSTUDIO_INSTALL_RESOURCES}/app"
- USE_SOURCE_PERMISSIONS
- PATTERN ".gitignore"
- EXCLUDE)
- else()
- install(DIRECTORY "${RSTUDIO_DEPENDENCIES_QUARTO_DIR}"
- DESTINATION "${RSTUDIO_INSTALL_BIN}"
@@ -63,7 +41,9 @@ index 0202e84..ec525d4 100644
- DESTINATION "${RSTUDIO_INSTALL_BIN}/pandoc"
- USE_SOURCE_PERMISSIONS)
- endif()
-
# install embedded packages
foreach(PKG ${RSTUDIO_EMBEDDED_PACKAGES})
file(GLOB PKG_FILES "${RSTUDIO_DEPENDENCIES_DIR}/common/${PKG}*.tar.gz")
# install Copilot Language Server
if(RSTUDIO_ENABLE_COPILOT)
--
2.51.0

View File

@@ -1,24 +1,24 @@
From 8754e2f6b8b46ca57fc3c446c8da48b55a49ceec Mon Sep 17 00:00:00 2001
From: Marco Varlese <marco.varlese@suse.com>
Date: Mon, 27 Jan 2020 14:29:40 +0100
Subject: [PATCH 3/8] Fix rstudio exec path
From 27a997e4b35784e420c4bba5806f495383f0aeb1 Mon Sep 17 00:00:00 2001
From: haem <mixosaurus+obs@pm.me>
Date: Fri, 12 Sep 2025 17:16:30 +0200
Subject: [PATCH 03/12] Fix rstudio exec path
Fix the path to the rstudio executable in the rstudio.desktop file.
Fix the path to the rstudio executable in the rstudio.desktop file
---
src/cpp/desktop/resources/freedesktop/rstudio.desktop.in | 2 +-
src/node/desktop/resources/freedesktop/rstudio.desktop.in | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/cpp/desktop/resources/freedesktop/rstudio.desktop.in b/src/cpp/desktop/resources/freedesktop/rstudio.desktop.in
index ddd96ad34b..99b207ba7c 100644
--- a/src/cpp/desktop/resources/freedesktop/rstudio.desktop.in
+++ b/src/cpp/desktop/resources/freedesktop/rstudio.desktop.in
diff --git a/src/node/desktop/resources/freedesktop/rstudio.desktop.in b/src/node/desktop/resources/freedesktop/rstudio.desktop.in
index 76197bce..d9c719f9 100644
--- a/src/node/desktop/resources/freedesktop/rstudio.desktop.in
+++ b/src/node/desktop/resources/freedesktop/rstudio.desktop.in
@@ -1,5 +1,5 @@
[Desktop Entry]
-Exec=${CMAKE_INSTALL_PREFIX}/${RSTUDIO_INSTALL_BIN}/rstudio %F
-Exec=${CMAKE_INSTALL_PREFIX}/rstudio %F
+Exec=rstudio %F
Icon=rstudio
Type=Application
Terminal=false
--
2.31.1
2.51.0

View File

@@ -1,7 +1,7 @@
From e2a3f7df916a4959d126e0c34b8f70b1e23de41a Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Dan=20=C4=8Cerm=C3=A1k?= <dcermak@suse.com>
Date: Wed, 2 Sep 2020 13:47:59 +0200
Subject: [PATCH 4/8] Add additional includes for aarch64
From e1a6c460e6c2b3d601678b5d158e37077de43739 Mon Sep 17 00:00:00 2001
From: haem <mixosaurus+obs@pm.me>
Date: Fri, 12 Sep 2025 17:16:39 +0200
Subject: [PATCH 04/12] Add additional includes for aarch64
---
src/cpp/core/HtmlUtils.cpp | 1 +
@@ -9,7 +9,7 @@ Subject: [PATCH 4/8] Add additional includes for aarch64
2 files changed, 2 insertions(+)
diff --git a/src/cpp/core/HtmlUtils.cpp b/src/cpp/core/HtmlUtils.cpp
index ca0adb40de..8b083f461f 100644
index 9623da6f..edb8de32 100644
--- a/src/cpp/core/HtmlUtils.cpp
+++ b/src/cpp/core/HtmlUtils.cpp
@@ -18,6 +18,7 @@
@@ -21,7 +21,7 @@ index ca0adb40de..8b083f461f 100644
#include <boost/bind/bind.hpp>
diff --git a/src/cpp/r/session/RStdCallbacks.cpp b/src/cpp/r/session/RStdCallbacks.cpp
index f461632102..937ffcc471 100644
index 72b66f29..8938bbcf 100644
--- a/src/cpp/r/session/RStdCallbacks.cpp
+++ b/src/cpp/r/session/RStdCallbacks.cpp
@@ -19,6 +19,7 @@
@@ -33,5 +33,5 @@ index f461632102..937ffcc471 100644
#include <boost/regex.hpp>
#include <boost/bind/bind.hpp>
--
2.31.1
2.51.0

View File

@@ -1,13 +1,16 @@
From e93996837bceb3bdae376332be5aca964a2737ff Mon Sep 17 00:00:00 2001
From: Aaron Puchert <aaronpuchert@alice-dsl.net>
Date: Mon, 7 Sep 2020 11:12:26 +0200
Subject: [PATCH 6/8] Fix libclang usage
From eea335f76f5d79bb2d3b24f5ee9c0c4819b11850 Mon Sep 17 00:00:00 2001
From: haem <mixosaurus+obs@pm.me>
Date: Fri, 12 Sep 2025 17:16:52 +0200
Subject: [PATCH 05/12] Fix libclang usage
Make sure we find the right libclang.so and builtin headers, make compatible with newer versions.
---
src/cpp/core/include/core/libclang/LibClang.hpp | 1 +
src/cpp/core/libclang/LibClang.cpp | 17 +++++++----------
2 files changed, 8 insertions(+), 10 deletions(-)
diff --git a/src/cpp/core/include/core/libclang/LibClang.hpp b/src/cpp/core/include/core/libclang/LibClang.hpp
index c7936ebb..d717f611 100644
--- a/src/cpp/core/include/core/libclang/LibClang.hpp
+++ b/src/cpp/core/include/core/libclang/LibClang.hpp
@@ -36,6 +36,7 @@
@@ -18,6 +21,8 @@ Subject: [PATCH 6/8] Fix libclang usage
namespace rstudio {
namespace core {
diff --git a/src/cpp/core/libclang/LibClang.cpp b/src/cpp/core/libclang/LibClang.cpp
index f166a43b..eed7f94b 100644
--- a/src/cpp/core/libclang/LibClang.cpp
+++ b/src/cpp/core/libclang/LibClang.cpp
@@ -62,12 +62,12 @@ std::vector<std::string> defaultCompileArgs(LibraryVersion version)
@@ -53,3 +58,6 @@ Subject: [PATCH 6/8] Fix libclang usage
// iterate through the set of available 'llvm' directories
for (const char* prefix : {"/usr/lib", "/usr/lib64"})
{
--
2.51.0

View File

@@ -1,49 +0,0 @@
From 8baa44c18668f4af96fc0838ac66c745a0d14c0b Mon Sep 17 00:00:00 2001
From: Aaron Puchert <aaronpuchert@alice-dsl.net>
Date: Mon, 7 Sep 2020 11:09:01 +0200
Subject: [PATCH 5/8] Use system hunspell
---
src/cpp/core/CMakeLists.txt | 6 +++++-
src/cpp/core/spelling/HunspellSpellingEngine.cpp | 7 +++----
2 files changed, 8 insertions(+), 5 deletions(-)
diff --git a/src/cpp/core/CMakeLists.txt b/src/cpp/core/CMakeLists.txt
index 06303de4aa..377c377721 100644
--- a/src/cpp/core/CMakeLists.txt
+++ b/src/cpp/core/CMakeLists.txt
@@ -15,7 +15,11 @@
project (CORE)
-add_subdirectory(spelling/hunspell)
+add_library(rstudio-core-hunspell SHARED IMPORTED GLOBAL)
+find_library(HUNSPELL_LIB NAMES hunspell REQUIRED)
+set_target_properties(rstudio-core-hunspell PROPERTIES
+ IMPORTED_LOCATION "${HUNSPELL_LIB}")
+
add_subdirectory(tex/synctex)
# include files
diff --git a/src/cpp/core/spelling/HunspellSpellingEngine.cpp b/src/cpp/core/spelling/HunspellSpellingEngine.cpp
index 861417db6e..60763c5fc1 100644
--- a/src/cpp/core/spelling/HunspellSpellingEngine.cpp
+++ b/src/cpp/core/spelling/HunspellSpellingEngine.cpp
@@ -195,11 +195,10 @@ public:
Error wordChars(std::wstring *pWordChars)
{
- int len;
- unsigned short *pChars = pHunspell_->get_wordchars_utf16(&len);
+ const std::vector<w_char> &pChars = pHunspell_->get_wordchars_utf16();
- for (int i = 0; i < len; i++)
- pWordChars->push_back(pChars[i]);
+ for (w_char pChar : pChars)
+ pWordChars->push_back((pChar.h << 8) + pChar.l);
return Success();
}
--
2.31.1

View File

@@ -0,0 +1,29 @@
From c2e9063cac945e51749590b3f61516424d543f41 Mon Sep 17 00:00:00 2001
From: haem <mixosaurus+obs@pm.me>
Date: Fri, 12 Sep 2025 17:17:01 +0200
Subject: [PATCH 06/12] Skip /etc/os-release
We don't want do depend on /etc/os-release, because that changes frequently in Tumbleweed.
And it doesn't seem right that the package depends on the distribution it is a part of.
---
cmake/globals.cmake | 4 ----
1 file changed, 4 deletions(-)
diff --git a/cmake/globals.cmake b/cmake/globals.cmake
index 9a5afca2..0e279ac0 100644
--- a/cmake/globals.cmake
+++ b/cmake/globals.cmake
@@ -23,10 +23,6 @@ if(CMAKE_SYSTEM_NAME STREQUAL Linux)
set(LINUX TRUE CACHE INTERNAL "")
endif()
-# read /etc/os-release
-if(LINUX)
- include(OsRelease)
-endif()
# version info
if ("$ENV{RSTUDIO_VERSION_MAJOR}" STREQUAL "")
--
2.51.0

View File

@@ -1,25 +1,48 @@
Not easy to build. If someone can figure out how to make this work,
this patch can be removed again.
From 584c4e721db80dc59c44fb2c5521ae1784100b90 Mon Sep 17 00:00:00 2001
From: haem <mixosaurus+obs@pm.me>
Date: Fri, 12 Sep 2025 17:17:31 +0200
Subject: [PATCH 07/12] Remove panmirror
It's difficult to build and requires quarto.
---
src/cpp/session/CMakeLists.txt | 14 -----
src/gwt/build.xml | 95 ----------------------------------
2 files changed, 109 deletions(-)
diff --git a/src/cpp/session/CMakeLists.txt b/src/cpp/session/CMakeLists.txt
index a0bc394..657c2e9 100644
index fa93a1e2..9d0c6b34 100644
--- a/src/cpp/session/CMakeLists.txt
+++ b/src/cpp/session/CMakeLists.txt
@@ -670,12 +670,6 @@ if(NOT RSTUDIO_SESSION_WIN32 AND NOT RSESSION_ALTERNATE_BUILD)
install(DIRECTORY "${RSTUDIO_DEPENDENCIES_DICTIONARIES_DIR}"
DESTINATION "${RSTUDIO_INSTALL_SUPPORTING}/resources")
- # install node
- install(
- DIRECTORY "${RSTUDIO_DEPENDENCIES_DIR}/common/node/${RSTUDIO_INSTALLED_NODE_VERSION}/"
- DESTINATION "${RSTUDIO_INSTALL_BIN}/node"
- USE_SOURCE_PERMISSIONS)
-
# install embedded packages
foreach(PKG ${RSTUDIO_EMBEDDED_PACKAGES})
file(GLOB PKG_FILES "${RSTUDIO_DEPENDENCIES_DIR}/common/${PKG}*.tar.gz")
@@ -442,17 +442,6 @@ endforeach()
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/../../../NOTICE
${CMAKE_CURRENT_SOURCE_DIR}/resources COPYONLY)
-# configure custom panmirror script into the resources directory
-#
-# On Linux and Windows builders, found in the tools directory, on Mac and dev
-# environments found in the source tree.
-set(RSTUDIO_PANMIRROR_SCRIPT ${CMAKE_CURRENT_SOURCE_DIR}/../../gwt/lib/quarto/packages/editor-server/src/resources/md-writer.lua)
-if(NOT EXISTS "${RSTUDIO_PANMIRROR_SCRIPT}")
- set(RSTUDIO_PANMIRROR_SCRIPT ${RSTUDIO_TOOLS_ROOT}/../src/gwt/lib/quarto/packages/editor-server/src/resources/md-writer.lua)
-endif()
-file(MAKE_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/resources/panmirror-scripts)
-configure_file(${RSTUDIO_PANMIRROR_SCRIPT}
- ${CMAKE_CURRENT_SOURCE_DIR}/resources/panmirror-scripts/ COPYONLY)
# set include directories
include_directories(
@@ -655,9 +644,6 @@ if(NOT RSTUDIO_SESSION_WIN32 AND NOT RSESSION_ALTERNATE_BUILD)
# notice
install(FILES "resources/NOTICE"
DESTINATION ${RSTUDIO_INSTALL_SUPPORTING}/resources)
- # panmirror scripts
- install(DIRECTORY "resources/panmirror-scripts"
- DESTINATION ${RSTUDIO_INSTALL_SUPPORTING}/resources)
# citation
configure_file("resources/CITATION.in"
diff --git a/src/gwt/build.xml b/src/gwt/build.xml
index 27ffe33..24fd98d 100644
index 53e296dc..925ea3c5 100644
--- a/src/gwt/build.xml
+++ b/src/gwt/build.xml
@@ -83,80 +83,6 @@
@@ -28,7 +51,7 @@ index 27ffe33..24fd98d 100644
- <!-- panmirror typescript library -->
- <!-- ensure version matches RSTUDIO_NODE_VERSION -->
- <property name="node.version" value="18.18.2"/>
- <property name="node.version" value="22.13.1"/>
- <property name="node.dir" value="../../dependencies/common/node/${node.version}"/>
- <!-- use yarn from system but will prefer yarn from dependencies if available -->
- <condition property="yarn.bin" value="yarn">
@@ -122,3 +145,40 @@ index 27ffe33..24fd98d 100644
</antcall>
</target>
@@ -246,23 +167,10 @@
<antcall target="generate-i18n"/>
<antcall target="codeserver">
<param name="gwt.main.module" value="org.rstudio.studio.RStudioSuperDevMode"/>
- <param name="panmirror.target" value="ide-dev"/>
- <param name="panmirror.minify" value="false"/>
- </antcall>
- </target>
-
- <target name="devmode-panmirror" description="Run server development mode">
- <antcall target="codeserver">
- <param name="gwt.main.module" value="org.rstudio.studio.RStudioSuperDevMode"/>
- <param name="panmirror.target" value="ide-dev-watch"/>
- <param name="panmirror.minify" value="false"/>
</antcall>
</target>
<target name="codeserver" depends="acesupport,javac" description="Run GWT devmode code server">
- <antcall target="panmirror">
- <param name="panmirror.target" value="${panmirror.target}"/>
- </antcall>
<java failonerror="true" fork="true" classname="com.google.gwt.dev.DevMode">
<classpath>
<pathelement location="${src.dir}"/>
@@ -382,9 +290,6 @@
<delete dir="gwt-unitCache" failonerror="false" />
<delete dir="${www.dir}/rstudio" failonerror="false" />
<delete file="${ace.bin}/acesupport.js" failonerror="false" />
- <delete dir="${panmirror.build.dir}" failonerror="false"/>
- <delete dir="${panmirror.dir}/dist-rstudio" failonerror="false"/>
- <delete dir="${panmirror.dir}/node_modules" failonerror="false"/>
<delete dir="gen" failonerror="false" />
<delete dir="${extras.dir}" failonerror="false" />
</target>
--
2.51.0

View File

@@ -1,34 +0,0 @@
From 31a42867cabd2680fb3a198d25a1d1d81d046459 Mon Sep 17 00:00:00 2001
From: Adam Majer <adam.majer@suse.de>
Date: Thu, 10 Sep 2020 14:56:17 +0200
Subject: [PATCH 8/8] Add support for RapidJSON 1.1.0 in Leap 15.2
---
src/cpp/shared_core/json/Json.cpp | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/src/cpp/shared_core/json/Json.cpp b/src/cpp/shared_core/json/Json.cpp
index a7a3521e4f..9ad01ce8dc 100644
--- a/src/cpp/shared_core/json/Json.cpp
+++ b/src/cpp/shared_core/json/Json.cpp
@@ -795,7 +795,7 @@ std::string Value::write() const
rapidjson::Writer<rapidjson::StringBuffer> writer(buffer);
m_impl->Document->Accept(writer);
- return std::string(buffer.GetString(), buffer.GetLength());
+ return std::string(buffer.GetString(), buffer.GetSize() / sizeof(rapidjson::StringBuffer::Ch));
}
void Value::write(std::ostream& os) const
@@ -809,7 +809,7 @@ std::string Value::writeFormatted() const
rapidjson::PrettyWriter<rapidjson::StringBuffer> writer(buffer);
m_impl->Document->Accept(writer);
- return std::string(buffer.GetString(), buffer.GetLength());
+ return std::string(buffer.GetString(), buffer.GetSize() / sizeof(rapidjson::StringBuffer::Ch));
}
void Value::writeFormatted(std::ostream& os) const
--
2.31.1

View File

@@ -0,0 +1,109 @@
From 986639a3f2b20d5425cacbf89f8199d3d6802932 Mon Sep 17 00:00:00 2001
From: haem <mixosaurus+obs@pm.me>
Date: Fri, 12 Sep 2025 17:17:21 +0200
Subject: [PATCH 08/12] Silence cmake_minimum_required warnings
---
CMakeLists.txt | 2 +-
package/osx/cmake/prepare-package.cmake | 2 +-
src/CMakeLists.txt | 2 +-
src/cpp/CMakeLists.txt | 2 +-
src/gwt/CMakeLists.txt | 2 +-
src/node/CMakeLists.txt | 2 +-
src/node/desktop/CMakeLists.txt | 2 +-
7 files changed, 7 insertions(+), 7 deletions(-)
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 106a7591..48155299 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -13,7 +13,7 @@
#
#
-cmake_minimum_required(VERSION 3.6.3)
+cmake_minimum_required(VERSION 3.6.3...3.19)
# initialize
include(cmake/init.cmake)
diff --git a/package/osx/cmake/prepare-package.cmake b/package/osx/cmake/prepare-package.cmake
index 47a39d0d..e69eded3 100644
--- a/package/osx/cmake/prepare-package.cmake
+++ b/package/osx/cmake/prepare-package.cmake
@@ -13,7 +13,7 @@
#
#
-cmake_minimum_required(VERSION 3.6.3)
+cmake_minimum_required(VERSION 3.6.3...3.19)
# CMake's message is suppressed during install stage so just use echo here
function(echo MESSAGE)
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 36498e71..5a50b2cc 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -12,7 +12,7 @@
#
# set minimum version
-cmake_minimum_required(VERSION 3.6.3)
+cmake_minimum_required(VERSION 3.6.3...3.19)
# don't add gwt for special 32-bit binary builds on windows (since
# we've already got it from the 64-bit build), for development mode
diff --git a/src/cpp/CMakeLists.txt b/src/cpp/CMakeLists.txt
index 18b87dd6..ac002742 100644
--- a/src/cpp/CMakeLists.txt
+++ b/src/cpp/CMakeLists.txt
@@ -14,7 +14,7 @@
#
# set minimum version
-cmake_minimum_required(VERSION 3.6.3)
+cmake_minimum_required(VERSION 3.6.3...3.19)
# initialize
include("${CMAKE_CURRENT_SOURCE_DIR}/../../cmake/init.cmake")
diff --git a/src/gwt/CMakeLists.txt b/src/gwt/CMakeLists.txt
index 2a98ee26..d20936a8 100644
--- a/src/gwt/CMakeLists.txt
+++ b/src/gwt/CMakeLists.txt
@@ -13,7 +13,7 @@
#
#
-cmake_minimum_required(VERSION 3.6.3)
+cmake_minimum_required(VERSION 3.6.3...3.19)
project (RSTUDIO_GWT)
set(GWT_LIB_DIR "lib")
diff --git a/src/node/CMakeLists.txt b/src/node/CMakeLists.txt
index d4b44313..00aecb00 100644
--- a/src/node/CMakeLists.txt
+++ b/src/node/CMakeLists.txt
@@ -12,7 +12,7 @@
#
# set minimum version
-cmake_minimum_required(VERSION 3.6.3)
+cmake_minimum_required(VERSION 3.6.3...3.19)
# don't add electron for development mode (since faster to work
# iteratively using "npm start" and so forth)
diff --git a/src/node/desktop/CMakeLists.txt b/src/node/desktop/CMakeLists.txt
index df379742..4efddea9 100644
--- a/src/node/desktop/CMakeLists.txt
+++ b/src/node/desktop/CMakeLists.txt
@@ -13,7 +13,7 @@
#
#
-cmake_minimum_required(VERSION 3.6.3)
+cmake_minimum_required(VERSION 3.6.3...3.19)
project(ELECTRON_DESKTOP)
if (LINUX)
--
2.51.0

View File

@@ -0,0 +1,65 @@
From cda82f25c6365e19f1fae49f41af8142488b3267 Mon Sep 17 00:00:00 2001
From: haem <mixosaurus+obs@pm.me>
Date: Fri, 12 Sep 2025 18:00:22 +0200
Subject: [PATCH 09/12] Use system nodejs
---
src/node/CMakeNodeTools.txt | 23 ++++++++++++++++++-----
1 file changed, 18 insertions(+), 5 deletions(-)
diff --git a/src/node/CMakeNodeTools.txt b/src/node/CMakeNodeTools.txt
index fb3f3942..e2127bd0 100644
--- a/src/node/CMakeNodeTools.txt
+++ b/src/node/CMakeNodeTools.txt
@@ -20,6 +20,7 @@ set(RSTUDIO_CMAKE_NODE_TOOLS_INCLUDED YES)
# set the node version
if(NOT DEFINED RSTUDIO_NODE_VERSION)
set(RSTUDIO_NODE_VERSION "22.13.1")
+ set(RSTUDIO_NODE_VERSION_MAJOR "22")
endif()
if(DEFINED ENV{RSTUDIO_NODE_VERSION})
set(RSTUDIO_NODE_VERSION $ENV{RSTUDIO_NODE_VERSION})
@@ -67,23 +68,35 @@ else()
"${CMAKE_CURRENT_LIST_DIR}/../../dependencies/common/node/${RSTUDIO_NODE_VERSION}")
endif()
-
+
+if (NOT NODEJS)
+ find_program(NODEJS NAMES node${RSTUDIO_NODE_VERSION_MAJOR} nodejs)
+endif()
+
if(NODEJS)
message(STATUS "Using node.js: ${NODEJS}")
else()
- message(FATAL_ERROR "node.js not found (required)")
+ message(FATAL_ERROR "node.js not found (required)")
+endif()
+
+if (NOT NPM)
+ find_program(NPM NAMES npm)
endif()
-
+
if(NPM)
message(STATUS "Using npm: ${NPM}")
else()
- message(FATAL_ERROR "npm not found (required for rsw-homepage)")
+ message(FATAL_ERROR "npm not found (required for rsw-homepage)")
+endif()
+
+if (NOT NPX)
+ find_program(NPX NAMES npx)
endif()
if(NPX)
message(STATUS "Using npx: ${NPX}")
else()
- message(STATUS "npx not found (required for Electron)")
+ message(STATUS "npx not found (required for Electron)")
endif()
get_filename_component(NODEJS_PATH ${NODEJS} DIRECTORY CACHE)
--
2.51.0

View File

@@ -0,0 +1,65 @@
From 834b274627e6b2b9191ff8e8a84100517b42ffdf Mon Sep 17 00:00:00 2001
From: haem <mixosaurus+obs@pm.me>
Date: Fri, 12 Sep 2025 18:03:43 +0200
Subject: [PATCH 10/12] Use bundled expected, gsl-lite, websocketpp
---
src/cpp/core/CMakeLists.txt | 4 ++--
src/cpp/ext/CMakeLists.txt | 16 +++++++++++++---
2 files changed, 15 insertions(+), 5 deletions(-)
diff --git a/src/cpp/core/CMakeLists.txt b/src/cpp/core/CMakeLists.txt
index 563f4c38..0fa71d81 100644
--- a/src/cpp/core/CMakeLists.txt
+++ b/src/cpp/core/CMakeLists.txt
@@ -334,9 +334,9 @@ target_link_libraries(rstudio-core
${SOCI_LIBRARIES}
${CORE_SYSTEM_LIBRARIES}
fmt::fmt
- gsl::gsl-lite-v1
- tl::expected
yaml-cpp::yaml-cpp
+ gsl-lite
+ expected
)
if(WIN32)
diff --git a/src/cpp/ext/CMakeLists.txt b/src/cpp/ext/CMakeLists.txt
index bc4f84cf..4c6349cc 100644
--- a/src/cpp/ext/CMakeLists.txt
+++ b/src/cpp/ext/CMakeLists.txt
@@ -207,11 +207,17 @@ function(fetch)
list(GET ARGV ${_INDEX1} _PREFIX)
if(${_PREFIX}_FETCHED)
- message(STATUS "Fetching dependency ${_NAME} ${${_PREFIX}_VERSION}")
- FetchContent_MakeAvailable("${_NAME}")
- message(STATUS "Fetching dependency ${_NAME} ${${_PREFIX}_VERSION} - success")
set("${_PREFIX}_SOURCE_DIR" "${CMAKE_BINARY_DIR}/_deps/${_NAME}-src" CACHE INTERNAL "")
set("${_PREFIX}_BINARY_DIR" "${CMAKE_BINARY_DIR}/_deps/${_NAME}-build" CACHE INTERNAL "")
+
+ if(NOT ${_PREFIX}_BUNDLED)
+ message(STATUS "Fetching dependency ${_NAME} ${${_PREFIX}_VERSION}")
+ FetchContent_MakeAvailable("${_NAME}")
+ message(STATUS "Fetching dependency ${_NAME} ${${_PREFIX}_VERSION} - success")
+ else()
+ add_subdirectory(${${_PREFIX}_SOURCE_DIR} ${${_PREFIX}_BINARY_DIR})
+ message(STATUS "Using bundled dependency ${_NAME} ${${_PREFIX}_VERSION} at ${${_PREFIX}_SOURCE_DIR}")
+ endif()
endif()
endwhile()
@@ -219,6 +225,10 @@ function(fetch)
endfunction()
+set(EXPECTED_BUNDLED TRUE)
+set(GSL_LITE_BUNDLED TRUE)
+set(WEBSOCKETPP_BUNDLED TRUE)
+
fetch(
expected EXPECTED
fmt FMT
--
2.51.0

View File

@@ -0,0 +1,89 @@
From 5e3e62745d61dc529c4caf06ecc197246e41e3e3 Mon Sep 17 00:00:00 2001
From: haem <mixosaurus+obs@pm.me>
Date: Fri, 12 Sep 2025 18:04:39 +0200
Subject: [PATCH 11/12] Use system fmt, yaml-cpp, hunspell
---
src/cpp/CMakeLists.txt | 5 ++++-
src/cpp/core/CMakeLists.txt | 11 ++++++++---
src/cpp/ext/CMakeLists.txt | 17 -----------------
3 files changed, 12 insertions(+), 21 deletions(-)
diff --git a/src/cpp/CMakeLists.txt b/src/cpp/CMakeLists.txt
index ac002742..b6f8f503 100644
--- a/src/cpp/CMakeLists.txt
+++ b/src/cpp/CMakeLists.txt
@@ -546,7 +546,10 @@ endif()
# external libraries
add_subdirectory(ext)
-include_directories(SYSTEM "${FMT_SOURCE_DIR}/include")
+
+if(NOT RSTUDIO_USE_SYSTEM_FMT)
+ include_directories(SYSTEM "${FMT_SOURCE_DIR}/include")
+endif()
# shared library
add_subdirectory(shared_core)
diff --git a/src/cpp/core/CMakeLists.txt b/src/cpp/core/CMakeLists.txt
index 0fa71d81..66363913 100644
--- a/src/cpp/core/CMakeLists.txt
+++ b/src/cpp/core/CMakeLists.txt
@@ -203,6 +203,12 @@ if (UNIX)
${ZLIB_LIBRARIES}
${CORE_SERVICES_LIBRARY})
+ if(RSTUDIO_USE_SYSTEM_HUNSPELL)
+ find_library(HUNSPELL_LIBRARIES hunspell)
+ list(APPEND CORE_SYSTEM_LIBRARIES ${HUNSPELL_LIBRARIES})
+ message(STATUS "Using system hunspell in core libraries")
+ endif()
+
list(APPEND CORE_SYSTEM_LIBRARIES ${OPENSSL_LIBRARIES})
list(APPEND CORE_INCLUDE_DIRS ${OPENSSL_INCLUDE_DIR})
@@ -327,14 +333,13 @@ define_source_file_names(rstudio-core)
# link dependencies
target_link_libraries(rstudio-core
rstudio-shared-core
- rstudio-hunspell
rstudio-websocketpp
${Boost_LIBRARIES}
${CRASHPAD_LIBRARIES}
${SOCI_LIBRARIES}
${CORE_SYSTEM_LIBRARIES}
- fmt::fmt
- yaml-cpp::yaml-cpp
+ fmt
+ yaml-cpp
gsl-lite
expected
)
diff --git a/src/cpp/ext/CMakeLists.txt b/src/cpp/ext/CMakeLists.txt
index 4c6349cc..0c8e7fc4 100644
--- a/src/cpp/ext/CMakeLists.txt
+++ b/src/cpp/ext/CMakeLists.txt
@@ -248,20 +248,3 @@ target_include_directories(rstudio-rapidjson INTERFACE "${RAPIDJSON_SOURCE_DIR}/
# Create websocketpp target.
add_library(rstudio-websocketpp INTERFACE EXCLUDE_FROM_ALL)
target_include_directories(rstudio-websocketpp INTERFACE "${WEBSOCKETPP_SOURCE_DIR}")
-
-
-# Create hunspell target.
-file(GLOB HUNSPELL_HEADER_FILES "${HUNSPELL_SOURCE_DIR}/src/hunspell/*.h*")
-file(GLOB HUNSPELL_SOURCE_FILES "${HUNSPELL_SOURCE_DIR}/src/hunspell/*.c*")
-add_library(rstudio-hunspell STATIC ${HUNSPELL_SOURCE_FILES} ${HUNSPELL_HEADER_FILES})
-set_target_properties(rstudio-hunspell PROPERTIES LINKER_LANGUAGE CXX)
-target_include_directories(rstudio-hunspell SYSTEM AFTER INTERFACE "${HUNSPELL_SOURCE_DIR}/src")
-target_compile_definitions(rstudio-hunspell PUBLIC HUNSPELL_STATIC=1)
-
-if(WIN32)
- target_include_directories(rstudio-hunspell SYSTEM AFTER PRIVATE "${HUNSPELL_PREFIX_DIR}/msvc")
- target_compile_options(rstudio-hunspell PRIVATE /wd4244 /wd4267)
- target_compile_options(rstudio-hunspell INTERFACE /wd4996)
-else()
- target_compile_options(rstudio-hunspell PRIVATE -Wno-deprecated-declarations -Wno-sign-compare -Wno-unused-but-set-variable)
-endif()
--
2.51.0

View File

@@ -0,0 +1,83 @@
From f4db917dcdf17ef842ffa23260ac6732ab500555 Mon Sep 17 00:00:00 2001
From: haem <mixosaurus+obs@pm.me>
Date: Fri, 12 Sep 2025 18:10:39 +0200
Subject: [PATCH 12/12] Don't list system dependencies as bundled
---
src/cpp/ext/CMakeLists.txt | 46 --------------------------------------
1 file changed, 46 deletions(-)
diff --git a/src/cpp/ext/CMakeLists.txt b/src/cpp/ext/CMakeLists.txt
index 0c8e7fc4..b3b32181 100644
--- a/src/cpp/ext/CMakeLists.txt
+++ b/src/cpp/ext/CMakeLists.txt
@@ -94,15 +94,6 @@ dependency(EXPECTED
set(EXPECTED_BUILD_TESTS OFF)
-# fmt
-dependency(FMT
- COMMENT "{fmt} is an open-source formatting library providing a fast and safe alternative to C stdio and C++ iostreams."
- VERSION "11.1.4"
- REPOSITORY "https://github.com/fmtlib/fmt"
- REVISION "123913715afeb8a437e6388b4473fcc4753e1c9a" # pragma: allowlist secret
-)
-
-set(FMT_INSTALL OFF)
# gsl-lite
@@ -114,25 +105,6 @@ dependency(GSL_LITE
)
-# hunspell
-dependency(HUNSPELL
- COMMENT "Hunspell is a free spell checker and morphological analyzer library and command-line tool, licensed under LGPL/GPL/MPL tri-license."
- VERSION "1.7.2"
- REPOSITORY "https://github.com/hunspell/hunspell"
- REVISION "2969be996acad84b91ab3875b1816636fe61a40e" # pragma: allowlist secret
- CUSTOM TRUE
-)
-
-
-# rapidjson
-dependency(RAPIDJSON
- COMMENT "A fast JSON parser/generator for C++ with both SAX/DOM style API"
- VERSION "1.1.0"
- REPOSITORY "https://github.com/Tencent/rapidjson"
- REVISION "24b5e7a8b27f42fa16b96fc70aade9106cf7102f" # pragma: allowlist secret
- CUSTOM TRUE
-)
-
# websocketpp
dependency(WEBSOCKETPP
COMMENT "WebSocket++ is a header only C++ library that implements RFC6455 The WebSocket Protocol."
@@ -143,24 +115,6 @@ dependency(WEBSOCKETPP
)
-# yaml-cpp
-dependency(YAML_CPP
- COMMENT "yaml-cpp is a YAML parser and emitter in C++ matching the YAML 1.2 spec."
- VERSION "0.8.0"
- REPOSITORY "https://github.com/jbeder/yaml-cpp"
- REVISION "f7320141120f720aecc4c32be25586e7da9eb978" # pragma: allowlist secret
-)
-
-
-# zlib
-dependency(ZLIB
- COMMENT "zlib is a general purpose data compression library."
- VERSION "1.3.1"
- REPOSITORY "https://github.com/madler/zlib"
- REVISION "51b7f2abdade71cd9bb0e7a373ef2610ec6f9daf" # pragma: allowlist secret
- PLATFORMS WIN32
-)
-
function(fetch)
--
2.51.0

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -1,42 +0,0 @@
--- rstudio-2024.04.0-735.orig/src/cpp/shared_core/FilePath.cpp
+++ rstudio-2024.04.0-735/src/cpp//shared_core/FilePath.cpp
@@ -50,6 +50,8 @@
#include <boost/algorithm/string/case_conv.hpp>
#include <boost/algorithm/string/predicate.hpp>
+#include <boost/version.hpp>
+
#include <shared_core/Logger.hpp>
#include <shared_core/Error.hpp>
#include <shared_core/SafeConvert.hpp>
@@ -806,11 +808,19 @@
{
try
{
+#if BOOST_VERSION >= 107500
using boost::filesystem::copy_options;
boost::filesystem::copy_file(
m_impl->Path,
in_targetPath.m_impl->Path,
overwrite ? copy_options::overwrite_existing : copy_options::none);
+#else
+ using boost::filesystem::copy_option;
+ boost::filesystem::copy_file(
+ m_impl->Path,
+ in_targetPath.m_impl->Path,
+ overwrite ? copy_option::overwrite_if_exists : copy_option::fail_if_exists);
+#endif
return Success();
}
catch(const boost::filesystem::filesystem_error& e)
--- rstudio-2024.04.0-735.orig/src/cpp/session/modules/environment/SessionEnvironment.cpp
+++ rstudio-2024.04.0-735/src/cpp/session/modules/environment/SessionEnvironment.cpp
@@ -229,7 +229,7 @@
if (!r::internal::isImmediateBinding(frameSEXP))
{
SEXP valueSEXP = CAR(frameSEXP);
- bool canBeSerialized = s_serializationCache.contains(valueSEXP)
+ bool canBeSerialized = s_serializationCache.find(valueSEXP) != s_serializationCache.end()
? s_serializationCache.at(valueSEXP)
: isSerializable(valueSEXP);
newCache[valueSEXP] = canBeSerialized;

View File

@@ -1,15 +0,0 @@
Adapt to https://github.com/boostorg/function/commit/af8e66d03b4366c7039a138306470567c2243130.
diff --git a/src/cpp/core/json/JsonRpc.cpp b/src/cpp/core/json/JsonRpc.cpp
index d034ffe..060f886 100644
--- a/src/cpp/core/json/JsonRpc.cpp
+++ b/src/cpp/core/json/JsonRpc.cpp
@@ -193,7 +193,7 @@ void JsonRpcResponse::setAfterResponse(
bool JsonRpcResponse::hasAfterResponse() const
{
- return afterResponse_;
+ return bool(afterResponse_);
}

BIN
node_modules.tar.gz LFS Normal file

Binary file not shown.

76
nodejs-bundler.sh Normal file → Executable file
View File

@@ -1,68 +1,26 @@
#!/bin/bash
usage() {
echo "Usage `basename $0` <path>" >&2
echo >&2
echo " Given a npm module path, download dependencies," >&2
echo " each in their own tarball." >&2
echo " Also finds licenses prod dependencies." >&2
echo >&2
exit 1
}
if ! [ -f /usr/bin/npm ]; then
echo >&2
echo "`basename $0` requires npm to run" >&2
echo >&2
echo "Run the following to fix this" >&2
echo " sudo dnf install npm" >&2
echo >&2
exit 2
fi
if [ $# -lt 1 ]; then
usage
else
case $1 in
-h | --help )
usage
;;
* )
PACKAGE="$1"
;;
esac
if [[ "$1" =~ [-]?-h(elp)? || ! -f package.json ]]; then
echo "Run this script in rstudio/src/node/desktop/ to download and bundle node_modules."
exit
fi
download_deps () {
pushd ${PACKAGE}
echo " Downloading $1 dependencies..."
npm install --no-optional --only=$1
status=$?
popd
if ! which pnpm >/dev/null; then
echo "This script requires pnpm."
exit 2
fi
if [ ${status} -ge 1 ] ; then
echo " ERROR WILL ROBINSON"
rm -rf ${PACKAGE}/node_modules
exit 1
fi
mv ${PACKAGE}/node_modules node_modules_$1
}
export ELECTRON_SKIP_BINARY_DOWNLOAD=1
NAME=$(jq -r .name ${PACKAGE}/package.json)
VERSION=$(jq -r .version ${PACKAGE}/package.json)
echo "=== downloading modules..."
pnpm install --no-frozen-lockfile --ignore-scripts --node-linker=hoisted
rm node_modules/.modules.yaml
download_deps prod
echo "=== compressing modules..."
tar --numeric-owner --owner=0 --group=0 --hard-dereference -czf node_modules.tar.gz node_modules
echo " Licenses in bundle..."
LICENSES="${NAME}-${VERSION}-bundled-licenses.txt"
find node_modules* -name "package.json" -exec jq -r .license {} \; > ${LICENSES}
find node_modules* -name "package.json" -exec jq -r '.licenses[] .type' {} \; \
>> ${LICENSES} 2>/dev/null
sed -i "/^null$/d" ${LICENSES}
sort -u -o ${LICENSES} ${LICENSES}
echo " Done. Please, check ${LICENSES} and remove the garbage."
echo "=== cleaning up"
rm -rf node_modules
rm pnpm-lock.yaml
download_deps dev
tar cfz ${NAME}-${VERSION}-nm.tgz node_modules_*
rm -rf node_modules_*
echo "done"

View File

@@ -1,13 +0,0 @@
Index: rstudio-2024.04.0-735/src/cpp/CMakeLists.txt
===================================================================
--- rstudio-2024.04.0-735.orig/src/cpp/CMakeLists.txt
+++ rstudio-2024.04.0-735/src/cpp/CMakeLists.txt
@@ -281,7 +281,7 @@
set(Boost_USE_STATIC_LIBS ON)
set(BOOST_INCLUDEDIR ${RSTUDIO_TOOLS_BOOST}/include)
find_package(Boost ${RSTUDIO_BOOST_REQUESTED_VERSION} HINTS "${RSTUDIO_TOOLS_BOOST}" EXACT REQUIRED)
- if(NOT Boost_VERSION LESS 106900)
+ if(NOT Boost_VERSION LESS 106600)
list(REMOVE_ITEM BOOST_LIBS signals)
endif()

View File

@@ -1,15 +0,0 @@
Fetching should still respect RSTUDIO_USE_SYSTEM_YAML_CPP=ON.
diff --git a/src/cpp/CMakeLists.txt b/src/cpp/CMakeLists.txt
index 5fa2649..f509421 100644
--- a/src/cpp/CMakeLists.txt
+++ b/src/cpp/CMakeLists.txt
@@ -197,7 +197,7 @@ endif()
# yaml-cpp
set(YAML_CPP_VERSION "0.8.0")
set(YAML_CPP_REVISION "f7320141120f720aecc4c32be25586e7da9eb978")
-if(CMAKE_VERSION VERSION_GREATER "3.14")
+if(NOT RSTUDIO_USE_SYSTEM_YAML_CPP AND CMAKE_VERSION VERSION_GREATER "3.14")
if(WIN32)
add_definitions(-DYAML_CPP_STATIC_DEFINE)

View File

@@ -64,15 +64,21 @@
# - xterm.js => bundled in ./src/gwt/src/org/rstudio/studio/client/workbench/views/terminal/xterm/xterm.js, version 3.14.5, license is MIT
%global bundled_xtermjs_version 3.14.5
# - winpty => windows only
# - websocketpp => unbundled
# - websocketpp => bundled in build/_deps/websocketpp-src, license is BSD-3-Clause
%global bundled_websocketpp_version 0.8.3
%global bundled_websocketpp_commit ee8cf4257e001d939839cff5b1766a835b749cd6
# - gwt-websockets => bundled in ./src/gwt/src/com/sksamuel/gwt, version 1.0.4, license is Apache-2.0
%global bundled_gwt_websockets_version 1.0.4
# - ansi-regex => some ANSI escape sequences from https://github.com/chalk/ansi-regex are used, license is MIT
# - RapidJSON => bundled in ./src/cpp/shared_core/include/shared_core/json/rapidjson, unbundled on Leap 15.2 & Tumbleweed, licensed under the MIT
# - msinttypes => part of rapidjson on Windows, licensed under BSD-3-Clause
# - fontawesome => per https://github.com/rstudio/rstudio/issues/7115, this is actually iconmoon, bundled in ./src/gwt/www/fonts/icomoon.woff, license is GPL-3.0-or-later or CC-BY-4.0, rstudio includes this under CC-BY-4.0
# - gsl-lite => bundled in ./src/cpp/ext/gsl, version is probably 0.34.0, license is MIT
%global bundled_gsl_lite_version 0.34.0
# - expected => bundled in build/_deps/expected-src, license is Public Domain
%global bundled_expected_version 1.1.0
%global bundled_expected_commit 292eff8bd8ee230a7df1d6a1c00c4ea0eb2f0362
# - gsl-lite => bundled in build/_deps/expected-src,, license is MIT
%global bundled_gsl_lite_version 0.42.0
%global bundled_gsl_lite_commit 21751fb0473473e27ffb1f280543885ed65447a8
# - inert-polyfill.js => bundled in ./src/gwt/www/js/inert-polyfill.min.js, version 0.2.5, license is Apache-2.0
%global bundled_intert_polyfill_js_version 0.2.5
# - focus-visible.js => bundled in ./src/gwt/www/js/focus-visible.*, version 5.0.2, license is W3C-20150513
@@ -86,17 +92,21 @@
# missing from NOTICE:
# - Google Closure Compiler => bundled in ./src/gwt/tools/compiler/ but AFAIK only used for building, version is "compiler-latest.zip as of July 9, 2019", license is Apache-2.0 with bundled dependencies under (NPL-1.1 AND (MPL-1.1 OR GPL-2.0-or-later)) AND MIT AND CPL-1.0 AND BSD-3-Clause AND Apache-2.0
# override upstream's choice for the boost version on Leap.
%if %{suse_version} <= 1500
%global rstudio_boost_requested_version 1.66
%endif
# # override upstream's choice for the boost version on Leap.
# % if % {suse_version} <= 1500
# % global rstudio_boost_requested_version 1.66
# % endif
%global rstudio_version_major 2024
%global rstudio_version_minor 04
%global rstudio_version_patch 0
%global rstudio_version_suffix 735
%global rstudio_version_major 2025
%global rstudio_version_minor 05
%global rstudio_version_patch 1
%global rstudio_version_suffix 513
# commit of the tag belonging to %%{version}
%global rstudio_git_revision_hash a00d0e775dbc93e0d79a1bf474e3e8e8de677383
%global rstudio_git_revision_hash ab7c1bc795c7dcff8f26215b832a3649a19fc16c
%global electron_req_version 33~
Name: rstudio
Version: %{rstudio_version_major}.%{rstudio_version_minor}.%{rstudio_version_patch}+%{rstudio_version_suffix}
Release: 0
@@ -123,30 +133,34 @@ Source0: %{URL}/%{name}/archive/v%{version}.tar.gz
# Upstream claims that the only licenses are:
# GPL 2.0, LGPL 2.1 (or later), MPL 1.1 and Apache 2.0
Source1: https://s3.amazonaws.com/%{name}-dictionaries/core-dictionaries.zip
Source4: %{name}-server-user.conf
Source99: %{name}-rpmlintrc
Source2: https://github.com/TartanLlama/expected/archive/%{bundled_expected_commit}.tar.gz
Source3: https://github.com/gsl-lite/gsl-lite/archive/%{bundled_gsl_lite_commit}.tar.gz
Source4: https://github.com/amini-allight/websocketpp/archive/%{bundled_websocketpp_commit}.tar.gz
Source5: node_modules.tar.gz
Source100: nodejs-bundler.sh
Patch0: 0001-Unbundle-mathjax-and-pandoc.patch
# shorten the installation time a bit by not installing mathjax
Patch1: 0002-Don-t-install-pandoc-and-mathjax.patch
Patch2: 0003-Fix-rstudio-exec-path.patch
Patch3: 0004-Add-additional-includes-for-aarch64.patch
# Make compatible with hunspell 1.4.0 or later, use system hunspell.
Patch4: 0005-Use-system-hunspell.patch
# Make sure we find the right libclang.so and builtin headers, make compatible with newer versions.
Patch5: 0006-Fix-libclang-usage.patch
# Remove panmirror until someone figures out how to include it again.
Patch6: remove-panmirror.patch
# Leap 15.2 only patch
Patch7: 0008-Add-support-for-RapidJSON-1.1.0-in-Leap-15.2.patch
# We don't want do depend on /etc/os-release, because that changes frequently in Tumbleweed.
# And it doesn't seem right that the package depends on the distribution it is a part of.
Patch8: skip-osrelease.patch
Patch9: unbundle-fmt.patch
Patch10: respect-system-yaml-cpp.patch
Patch11: fix-boost-1.85-build.patch
Patch12: fix-boost-1.66-build.patch
Patch100: old-boost.patch
Source101: %{name}-server-user.conf
Source102: %{name}-rpmlintrc
Patch1: 0001-Unbundle-mathjax-and-pandoc.patch
Patch2: 0002-Don-t-install-pandoc-and-mathjax.patch
Patch3: 0003-Fix-rstudio-exec-path.patch
Patch4: 0004-Add-additional-includes-for-aarch64.patch
Patch5: 0005-Fix-libclang-usage.patch
Patch6: 0006-Skip-etc-os-release.patch
Patch7: 0007-Remove-panmirror.patch
Patch8: 0008-Silence-cmake_minimum_required-warnings.patch
Patch9: 0009-Use-system-nodejs.patch
Patch10: 0010-Use-bundled-expected-gsl-lite-websocketpp.patch
Patch11: 0011-Use-system-fmt-yaml-cpp-hunspell.patch
Patch12: 0012-Don-t-list-system-dependencies-as-bundled.patch
# Patch7: 0008-Add-support-for-RapidJSON-1.1.0-in-Leap-15.2.patch obsolete, Leap 15.2 only
# Patch9: 0009-Use-system-rapidjson-websocketpp-yaml-cpp.patch replaced
# Patch9: unbundle-fmt.patch replaced
# Patch10: respect-system-yaml-cpp.patch obsolete
# Patch11: fix-boost-1.85-build.patch outdated, obsolete
# Patch12: fix-boost-1.66-build.patch outdated, obsolete
# Patch100: old-boost.patch outdated, obsolete
BuildRequires: Mesa-devel
BuildRequires: R-core-devel >= 3.6.0
@@ -184,6 +198,16 @@ BuildRequires: soci-sqlite3-devel
BuildRequires: systemd-rpm-macros
BuildRequires: sysuser-tools
BuildRequires: unzip
BuildRequires: yarn
BuildRequires: npm22
BuildRequires: nodejs22
BuildRequires: nodejs-common
BuildRequires: esbuild >= 0.17
BuildRequires: nodejs-electron-devel >= %{electron_req_version}
# BuildRequires: nodejs-packaging
# BuildRequires: nodejs-gyp
BuildRequires: cmake(fmt)
BuildRequires: cmake(yaml-cpp)
BuildRequires: pkgconfig(Qt5Core)
@@ -213,10 +237,13 @@ BuildRequires: pkgconfig(openssl)
BuildRequires: pkgconfig(pango)
BuildRequires: pkgconfig(sqlite3)
BuildRequires: pkgconfig(uuid)
BuildRequires: pkgconfig(websocketpp)
# BuildRequires: pkgconfig(websocketpp) 0.8.3, Tumbleweed only has 0.8.2
BuildRequires: pkgconfig(zlib)
Requires: R-base
Requires: R-core-libs
Requires: nodejs-electron%{_isa}
Recommends: gcc
Recommends: gcc-c++
Recommends: ghc-pandoc-citeproc
@@ -235,6 +262,8 @@ Provides: bundled(focus-visible.js) = %{bundled_focus_visible_js_version}
Provides: bundled(fontawesome)
Provides: bundled(gin) = %{bundled_gin_version}
Provides: bundled(gsl-lite) = %{bundled_gsl_lite_version}
Provides: bundled(expected) = %{bundled_expected_version}
Provides: bundled(websocketpp) = %{bundled_websocketpp_version}
Provides: bundled(guice) = %{bundled_guice_version}
Provides: bundled(gwt-rstudio) = %{bundled_gwt_rstudio_version}
Provides: bundled(gwt-websockets) = %{bundled_gwt_websockets_version}
@@ -290,30 +319,48 @@ on a server has a number of benefits, including:
%autosetup -p1 -n %{name}-%{rstudio_version_major}.%{rstudio_version_minor}.%{rstudio_version_patch}-%{rstudio_version_suffix}
# use system libraries when available
rm -r \
src/cpp/core/include/core/libclang/clang-c/ \
src/cpp/core/spelling/hunspell/ \
src/cpp/ext/fmt \
src/cpp/ext/websocketpp \
src/cpp/shared_core/include/shared_core/json/rapidjson/
find src/cpp/core/zlib -type f -not -name '*.cpp' -delete
rm -r src/cpp/core/include/core/libclang/clang-c/
# rm -r \
# src/cpp/core/include/core/libclang/clang-c/ \
# src/cpp/core/spelling/hunspell/ \
# src/cpp/ext/fmt \
# src/cpp/ext/websocketpp \
# src/cpp/shared_core/include/shared_core/json/rapidjson/
# find src/cpp/core/zlib -type f -not -name '*.cpp' -delete
ln -sf %{_includedir}/websocketpp src/cpp/ext/websocketpp
ln -sf %{_includedir}/rapidjson src/cpp/shared_core/include/shared_core/json/rapidjson
# ln -sf %{_includedir}/websocketpp src/cpp/ext/websocketpp
# ln -sf %{_includedir}/rapidjson src/cpp/shared_core/include/shared_core/json/rapidjson
# unpack common-dictionaries
mkdir -p dependencies/dictionaries
unzip -d dependencies/dictionaries %{SOURCE1}
mkdir -p build/_deps/expected-src
mkdir -p build/_deps/expected-build
tar xzvf %{SOURCE2} --strip-components=1 --one-top-level=build/_deps/expected-src
mkdir -p build/_deps/gsl-lite-src
mkdir -p build/_deps/gsl-lite-build
tar xzvf %{SOURCE3} --strip-components=1 --one-top-level=build/_deps/gsl-lite-src
mkdir -p build/_deps/websocketpp-src
mkdir -p build/_deps/websocketpp-build
tar xzvf %{SOURCE4} --strip-components=1 --one-top-level=build/_deps/websocketpp-src
mkdir -p src/node/desktop
pushd src/node/desktop
tar xzvf %{SOURCE5} --strip-components=1 --one-top-level=src/node/desktop/node_modules
popd
# don't include gwt_build in ALL to avoid recompilation, but then we must build
# it manually
sed -i 's@gwt_build ALL@gwt_build@g' src/gwt/CMakeLists.txt
# # # # sed -i 's@gwt_build ALL@gwt_build@g' src/gwt/CMakeLists.txt
# The unversioned libclang.so is only part of clang-devel, so we use the versioned so instead.
sed -i 's#LIBCLANG_PLACEHOLDER#%{_libdir}/libclang.so.%{_libclang_sonum}#' src/cpp/core/libclang/LibClang.cpp
%build
%sysusers_generate_pre %{SOURCE4} %{name}-server
%sysusers_generate_pre %{SOURCE101} %{name}-server
export RSTUDIO_VERSION_MAJOR=%{rstudio_version_major}
export RSTUDIO_VERSION_MINOR=%{rstudio_version_minor}
@@ -321,29 +368,68 @@ export RSTUDIO_VERSION_PATCH=%{rstudio_version_patch}
export RSTUDIO_VERSION_SUFFIX=+%{rstudio_version_suffix}
export RSTUDIO_GIT_REVISION_HASH=%{rstudio_git_revision_hash}
export GIT_COMMIT=%{rstudio_git_revision_hash}
%cmake -DRSTUDIO_TARGET=Desktop \
-DRSTUDIO_DESKTOP:BOOL=ON \
-DRSTUDIO_SERVER:BOOL=ON \
export RSTUDIO_NODE_VERSION="$(node --version | sed 's/^v//')"
%cmake \
-DRSTUDIO_TARGET=Electron \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_INSTALL_PREFIX=%{_libexecdir}/%{name} \
-DRSTUDIO_PACKAGE_BUILD:BOOL=FALSE \
-DRSTUDIO_USE_SYSTEM_BOOST=TRUE \
-DRSTUDIO_USE_SYSTEM_SOCI=TRUE \
-DRSTUDIO_BOOST_SIGNALS_VERSION=2 \
-DRSTUDIO_USE_SYSTEM_HUNSPELL=TRUE \
-DRSTUDIO_USE_SYSTEM_FMT=TRUE \
-DRSTUDIO_USE_SYSTEM_RAPIDJSON=TRUE \
-DRSTUDIO_USE_SYSTEM_WEBSOCKETPP=FALSE \
-DRSTUDIO_USE_SYSTEM_YAML_CPP=TRUE \
-DBOOST_ROOT=%{_prefix} -DBOOST_LIBRARYDIR=%{_lib} \
%{?rstudio_boost_requested_version:-DRSTUDIO_BOOST_REQUESTED_VERSION=%{rstudio_boost_requested_version}} \
-DQUARTO_ENABLED:BOOL=FALSE \
-DQT_QMAKE_EXECUTABLE=%{_bindir}/qmake-qt5
-DRSTUDIO_USE_SYSTEM_ZLIB=TRUE \
-DQUARTO_ENABLED:BOOL=FALSE \
-DSCCACHE_ENABLED:BOOL=FALSE \
-DRSTUDIO_ENABLE_COPILOT:BOOL=FALSE \
-DRSTUDIO_UNIT_TESTS_DISABLED:BOOL=TRUE \
-DQT_QMAKE_EXECUTABLE=%{_bindir}/qmake-qt5 \
-DGWT_BUILD:BOOL=TRUE \
-DGWT_BIN_DIR="%{_builddir}/gwt/bin" \
-DGWT_WWW_DIR="%{__builddir}/gwt/www" \
-DGWT_EXTRAS_DIR="%{_builddir}/gwt/extras" \
%make_build
%make_build gwt_build
# # # # # -DGWT_BUILD:BOOL=OFF \
# -DRSTUDIO_DESKTOP:BOOL=ON \
# -DRSTUDIO_SERVER:BOOL=ON \
# -DRSTUDIO_BOOST_SIGNALS_VERSION=2 already set by upstream \
# -DBOOST_ROOT=%{_prefix} was needed for Leap < 15 \
# -DBOOST_LIBRARYDIR=%{_lib} -"- \
# %{?rstudio_boost_requested_version:-DRSTUDIO_BOOST_REQUESTED_VERSION=%{rstudio_boost_requested_version}} -"- \
export GWT_MAIN_MODULE=RStudioDesktop
export ELECTRON_SOURCE_DIR="$(pwd)/../src/node/desktop"
version="%{rstudio_version_major}.%{rstudio_version_minor}.%{rstudio_version_patch}+%{rstudio_version_suffix}-%{rstudio_git_revision_hash}"
export ELECTRON_CACHE="$(pwd)/vendor/cache/electron"
export ELECTRON_BUILDER_CACHE="$(pwd)/vendor/cache/electron-builder"
export ELECTRON_SKIP_BINARY_DOWNLOAD=1
export ESBUILD_BINARY_PATH=%{_bindir}/esbuild
export USE_SYSTEM_APP_BUILDER=true
export ELECTRON_OVERRIDE_DIST_PATH=%{_bindir}
# Fix package.json
# TODO use a patch instead?
cp "$ELECTRON_SOURCE_DIR/package.json" "$ELECTRON_SOURCE_DIR/package.json.orig"
sed "s/\"version\": .*/\"version\": \"$version\",/g" -i "$ELECTRON_SOURCE_DIR/package.json"
%cmake_build
# # # % make_build gwt_build
%install
%cmake_install
# sysuser for rstudio-server
mkdir -p %{buildroot}%{_sysusersdir}
install -m 0644 %{SOURCE4} %{buildroot}%{_sysusersdir}/
install -m 0644 %{SOURCE101} %{buildroot}%{_sysusersdir}/
# create /usr/bin/rstudio-desktop, /usr/bin/rserver, /usr/bin/rserver-pam
install -d -m 0755 %{buildroot}%{_bindir}
@@ -356,9 +442,7 @@ done
# scripts
# * do not create /var/run, that one is owned by the filesystem package and
# doesn't need to be Require'd.
# Also, the INSTALL appears to be wrong, it's only creating a
# rstudio-server.pid file there.
# FIXME: await confirm from https://github.com/rstudio/rstudio/issues/6112
# Cf. https://github.com/rstudio/rstudio/issues/6112
for dir in log lib; do
mkdir -p %{buildroot}%{_localstatedir}/${dir}/%{name}-server
done

View File

@@ -1,16 +0,0 @@
diff --git a/CMakeGlobals.txt b/CMakeGlobals.txt
index 15001b2..5e86187 100644
--- a/CMakeGlobals.txt
+++ b/CMakeGlobals.txt
@@ -29,11 +29,6 @@ endif()
get_filename_component(ROOT_SRC_DIR ${CMAKE_CURRENT_LIST_FILE} PATH)
set(CMAKE_MODULE_PATH "${ROOT_SRC_DIR}/cmake/modules/")
-# read /etc/os-release
-if(LINUX)
- include(OsRelease)
-endif()
-
# version info
if ("$ENV{RSTUDIO_VERSION_MAJOR}" STREQUAL "")
string(TIMESTAMP CPACK_PACKAGE_VERSION_MAJOR "%Y")

View File

@@ -1,24 +0,0 @@
diff --git a/src/cpp/CMakeLists.txt b/src/cpp/CMakeLists.txt
index b1a91eb..ff44703 100644
--- a/src/cpp/CMakeLists.txt
+++ b/src/cpp/CMakeLists.txt
@@ -580,7 +580,7 @@ endif()
# external libraries
add_subdirectory(ext)
-include_directories(SYSTEM "${FMT_SOURCE_DIR}/include")
+find_package(fmt REQUIRED)
# shared library
add_subdirectory(shared_core)
diff --git a/src/cpp/ext/CMakeLists.txt b/src/cpp/ext/CMakeLists.txt
index 2e08e79..0b4d5fa 100644
--- a/src/cpp/ext/CMakeLists.txt
+++ b/src/cpp/ext/CMakeLists.txt
@@ -14,6 +14,3 @@
#
project (EXT)
-
-add_subdirectory(fmt)
-

View File

@@ -1,3 +0,0 @@
version https://git-lfs.github.com/spec/v1
oid sha256:15dfab3e794b24dbc80093b83bda87a77b7ab197faa8b09fcbad84fc68985960
size 272412117

BIN
v2025.05.1+513.tar.gz LFS Normal file

Binary file not shown.