summaryrefslogtreecommitdiff
blob: 662089e93a018df862d4a9f3b679218add2dd2fd (plain)
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
From 71b1a935762efd24a79de193662450de5a89f67e Mon Sep 17 00:00:00 2001
From: Jonathan McPherson <jonathan@rstudio.com>
Date: Tue, 14 Jan 2020 12:53:20 -0800
Subject: [PATCH] use R_NoSave over R_Slave for R 4.0+

---
 src/cpp/r/CMakeLists.txt             | 12 ++++++++++++
 src/cpp/r/config.h.in                |  8 +++++++-
 src/cpp/r/session/REmbeddedPosix.cpp | 20 ++++++++++++++------
 3 files changed, 33 insertions(+), 7 deletions(-)

diff --git a/src/cpp/r/CMakeLists.txt b/src/cpp/r/CMakeLists.txt
index 6984ae309c..29784b8b67 100644
--- a/src/cpp/r/CMakeLists.txt
+++ b/src/cpp/r/CMakeLists.txt
@@ -15,6 +15,18 @@
 
 project (R)
 
+# find the version of R in play
+find_package(LibR REQUIRED)
+execute_process(
+    COMMAND "${LIBR_EXECUTABLE}" "--vanilla" "--slave" "-e" "cat(as.character(getRversion()))"
+    OUTPUT_VARIABLE LIBR_VERSION)
+
+# parse and save the R version to a variable
+string(REPLACE "." ";" R_VERSION_LIST "${LIBR_VERSION}")
+list(GET R_VERSION_LIST 0 R_VERSION_MAJOR)
+list(GET R_VERSION_LIST 1 R_VERSION_MINOR)
+list(GET R_VERSION_LIST 2 R_VERSION_PATCH)
+
 # include files
 file(GLOB_RECURSE R_HEADER_FILES "*.h*")
 
diff --git a/src/cpp/r/config.h.in b/src/cpp/r/config.h.in
index 6ba67c8e09..00bc8b6191 100644
--- a/src/cpp/r/config.h.in
+++ b/src/cpp/r/config.h.in
@@ -1,7 +1,7 @@
 /*
  * config.h.in
  *
- * Copyright (C) 2009-12 by RStudio, PBC
+ * Copyright (C) 2009-20 by RStudio, Inc.
  *
  * Unless you have received this program directly from RStudio pursuant
  * to the terms of a commercial license agreement with RStudio, then
@@ -16,4 +16,10 @@
 
 #cmakedefine PANGO_CAIRO_FOUND
 
+// Important: These variables represent the version of R found during
+// compile/link time, NOT the version of R present at runtime.
+#define R_VERSION_MAJOR ${R_VERSION_MAJOR}
+#define R_VERSION_MINOR ${R_VERSION_MINOR}
+#define R_VERSION_PATCH ${R_VERSION_PATCH}
+