about summary refs log tree commit diff
diff options
context:
space:
mode:
authorEfraim Flashner2020-08-18 08:19:08 -0500
committerEfraim Flashner2020-08-18 08:19:08 -0500
commit3305d6668ca59282cd01e908437570e6d6423ffd (patch)
tree73db8e2f4fc3d372ba5a43d3c8cd63085655c8ad
parentf3e338e1ede999f63b974c799da30e2a57bfab70 (diff)
downloadguix-bioinformatics-3305d6668ca59282cd01e908437570e6d6423ffd.tar.gz
gn: Add r-minimal-2 and some R packages
-rw-r--r--gn/packages/statistics.scm151
1 files changed, 150 insertions, 1 deletions
diff --git a/gn/packages/statistics.scm b/gn/packages/statistics.scm
index e910df4..73194fb 100644
--- a/gn/packages/statistics.scm
+++ b/gn/packages/statistics.scm
@@ -12,7 +12,9 @@
   #:use-module (gnu packages python)
   #:use-module (gnu packages python-science)
   #:use-module (gnu packages python-xyz)
-  #:use-module (gnu packages statistics))
+  #:use-module (gnu packages statistics)
+  #:use-module (gnu packages texinfo)
+  #:use-module (srfi srfi-1))
 
 (define-public r-hmisc-3
   (package
@@ -148,3 +150,150 @@ traits (CTL).  The additional correlation information obtained can be
 combined with QTL information to perform de novo reconstruction of
 interaction networks.")
     (license license:gpl3)))
+
+;; r-with-tests is private so we inherit from r-minimal.
+(define r-with-tests-2
+  (package
+    (inherit r-minimal)
+    (name "r-with-tests")
+    (version "2.15.3")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (string-append "mirror://cran/src/base"
+                            "/R-" (version-major version)
+                            "/R-" version ".tar.gz"))
+        (sha256
+         (base32
+          "1mjmq95s5nrwppbzic6lzanjq65j3sxg85l1q09c0fxdin7s70y5"))))
+    (arguments
+     (substitute-keyword-arguments (package-arguments r-minimal)
+       ((#:tests? _ #t) #t)
+       ((#:configure-flags cf)
+        `(cons* "--with-system-zlib"
+                "--with-system-bzlib"
+                "--with-system-pcre"
+                (delete "--without-recommended-packages" ,cf)))
+       ((#:phases phases)
+        `(modify-phases ,phases
+           ;; We can only use some of 'build-reproducibly with this older version.
+           (replace 'build-reproducibly
+             (lambda _
+               ;; The documentation contains time stamps to demonstrate
+               ;; documentation generation in different phases.
+               (substitute* "src/library/tools/man/Rd2HTML.Rd"
+                 (("\\\\%Y-\\\\%m-\\\\%d at \\\\%H:\\\\%M:\\\\%S")
+                  "(removed for reproducibility)"))
+
+               ;; Remove timestamp from tracing environment.  This fixes
+               ;; reproducibility of "methods.rd{b,x}".
+               (substitute* "src/library/methods/R/trace.R"
+                 (("dateCreated = Sys.time\\(\\)")
+                  "dateCreated = as.POSIXct(\"1970-1-1 00:00:00\", tz = \"UTC\")"))
+
+               ;; Ensure that gzipped files are reproducible.
+               (substitute* '("src/library/grDevices/Makefile.in"
+                              "doc/manual/Makefile.in")
+                 (("R_GZIPCMD\\)" line)
+                  (string-append line " -n")))
+
+               ;; The "srcfile" procedure in "src/library/base/R/srcfile.R"
+               ;; queries the mtime of a given file and records it in an object.
+               ;; This is acceptable at runtime to detect stale source files,
+               ;; but it destroys reproducibility at build time.
+ 
+               ;; Similarly, the "srcfilecopy" procedure records the current
+               ;; time.  We change both of them to respect SOURCE_DATE_EPOCH.
+;               (substitute* "src/library/base/R/srcfile.R"
+;                 (("timestamp <- (timestamp.*|file.mtime.*)" _ time)
+;                  (string-append "timestamp <- \
+;as.POSIXct(if (\"\" != Sys.getenv(\"SOURCE_DATE_EPOCH\")) {\
+;  as.numeric(Sys.getenv(\"SOURCE_DATE_EPOCH\"))\
+;} else { " time "}, origin=\"1970-01-01\")\n")))
+
+               ;; This library is installed using "install_package_description",
+               ;; so we need to pass the "builtStamp" argument.
+               ;(substitute* "src/library/tools/Makefile.in"
+               ;  (("(install_package_description\\(.*\"')\\)\"" line prefix)
+               ;   (string-append prefix ", builtStamp='1970-01-01')\"")))
+
+               (substitute* "src/library/Recommended/Makefile.in"
+                 (("INSTALL_OPTS =" m)
+                  (string-append m " --built-timestamp=1970-01-01" m)))
+
+               ;; R bundles an older version of help2man, which does not respect
+               ;; SOURCE_DATE_EPOCH.  We cannot just use the latest help2man,
+               ;; because that breaks a test.
+               (with-fluids ((%default-port-encoding "ISO-8859-1"))
+                 (substitute* "tools/help2man.pl"
+                   (("my \\$date = strftime \"%B %Y\", localtime" line)
+                    (string-append line " 1"))))
+               #t))))))
+    (native-inputs
+     `(("texinfo" ,texinfo-4)
+       ,@(alist-delete "texinfo" (package-native-inputs r-minimal))))
+    (properties '((release-date "2013-03-01")))))
+
+(define-public r-minimal-2
+  (package
+    (inherit r-with-tests-2)
+    (name "r-minimal")
+    (arguments
+     (substitute-keyword-arguments (package-arguments r-with-tests-2)
+       ((#:tests? _ #f) #f)
+       ((#:configure-flags flags)
+        ;; Do not build the recommended packages.  The build system creates
+        ;; random temporary directories and embeds their names in some
+        ;; package files.  We build these packages with the r-build-system
+        ;; instead.
+        `(cons* "--without-recommended-packages" ,flags))))))
+
+(define-public r-2-lattice
+  (package
+    (inherit r-lattice)
+    (name "r-lattice")
+    (version "0.20-31")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (cran-uri "lattice" version))
+        (sha256
+         (base32
+          "1b3m3rg1zd8ssk5jjswk5y93js89vh6939kfajh6i6wphndxigb1"))))
+    (build-system r-build-system)
+    (arguments
+     `(#:r ,r-minimal-2))))
+
+(define-public r-2-matrix
+  (package
+    (inherit r-matrix)
+    (name "r-matrix")
+    (version "1.2-0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (cran-uri "Matrix" version))
+       (sha256
+        (base32
+         "0ywz213p6cpwnklxd81hzdyxjzagaj6cn32ycc5rcnhxy30d7kk5"))))
+    (arguments
+     `(#:r ,r-minimal-2))
+    (propagated-inputs
+     `(("r-lattice" ,r-2-lattice)))))
+
+(define-public r-2-survival
+  (package
+    (inherit r-survival)
+    (name "r-survival")
+    (version "2.41-3")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (cran-uri "survival" version))
+       (sha256
+        (base32
+         "07cnr0hnki6ybbjll54l4s5lllhk19vni5f8m0mvsfp99ls7qygk"))))
+    (arguments
+     `(#:r ,r-minimal-2))
+    (propagated-inputs
+     `(("r-matrix" ,r-2-matrix)))))