me
/
guix
Archived
1
0
Fork 0

gnu: r-minimal, r-with-tests: Use G-expressions.

* gnu/packages/statistics.scm (r-minimal, r-with-tests)[arguments]: Use
G-expressions.

Change-Id: I241297444cdb261dfc9901efd73c436a7ccf0acf
master
Ricardo Wurmus 2024-01-30 12:51:40 +01:00
parent 9f1ab898c3
commit afe677a623
No known key found for this signature in database
GPG Key ID: 197A5888235FACAC
1 changed files with 174 additions and 175 deletions

View File

@ -228,157 +228,157 @@ This package also provides @command{xls2csv} to export Excel files to CSV.")
"0aj51j34q2b28y28xvlf0dwdj8vpnhjwpvqf7xm05s7fq857dxdk"))))
(build-system gnu-build-system)
(arguments
`(#:disallowed-references (,tzdata-for-tests)
#:make-flags
(list (string-append "LDFLAGS=-Wl,-rpath="
(assoc-ref %outputs "out")
"/lib/R/lib")
;; This affects the embedded timestamp of only the core packages.
"PKG_BUILT_STAMP=1970-01-01")
#:phases
(modify-phases %standard-phases
(add-before 'configure 'do-not-compress-serialized-files
(lambda* (#:key inputs #:allow-other-keys)
;; This ensures that Guix can detect embedded store references;
;; see bug #28157 for details.
(substitute* "src/library/base/makebasedb.R"
(("compress = TRUE") "compress = FALSE"))))
(add-before 'configure 'patch-coreutils-paths
(lambda* (#:key inputs #:allow-other-keys)
(let ((uname-bin (search-input-file inputs "/bin/uname"))
(rm-bin (search-input-file inputs "/bin/rm")))
(substitute* "src/scripts/R.sh.in"
(("uname") uname-bin))
(substitute* "src/unix/sys-std.c"
(("rm -Rf ") (string-append rm-bin " -Rf ")))
(substitute* "src/library/parallel/R/detectCores.R"
(("'grep")
(string-append "'"
(search-input-file inputs "/bin/grep")))
(("\\| wc -l")
(string-append "| "
(search-input-file inputs "/bin/wc")
" -l"))))))
(add-after 'unpack 'patch-tests
(lambda _
;; This is needed because R is run during the check phase and
;; /bin/sh doesn't exist in the build container.
(substitute* "src/unix/sys-unix.c"
(("\"/bin/sh\"")
(string-append "\"" (which "sh") "\"")))
;; This test fails because line numbers are off by two.
(substitute* "tests/reg-packages.R"
(("8 <= print" m) (string-append "## " m)))))
(add-after 'unpack '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)"))
(list
#:disallowed-references `(,tzdata-for-tests)
#:make-flags
#~(list (string-append "LDFLAGS=-Wl,-rpath=" #$output "/lib/R/lib")
;; This affects the embedded timestamp of only the core packages.
"PKG_BUILT_STAMP=1970-01-01")
#:phases
#~(modify-phases %standard-phases
(add-before 'configure 'do-not-compress-serialized-files
(lambda _
;; This ensures that Guix can detect embedded store references;
;; see bug #28157 for details.
(substitute* "src/library/base/makebasedb.R"
(("compress = TRUE") "compress = FALSE"))))
(add-before 'configure 'patch-coreutils-paths
(lambda* (#:key inputs #:allow-other-keys)
(let ((uname-bin (search-input-file inputs "/bin/uname"))
(rm-bin (search-input-file inputs "/bin/rm")))
(substitute* "src/scripts/R.sh.in"
(("uname") uname-bin))
(substitute* "src/unix/sys-std.c"
(("rm -Rf ") (string-append rm-bin " -Rf ")))
(substitute* "src/library/parallel/R/detectCores.R"
(("'grep")
(string-append "'"
(search-input-file inputs "/bin/grep")))
(("\\| wc -l")
(string-append "| "
(search-input-file inputs "/bin/wc")
" -l"))))))
(add-after 'unpack 'patch-tests
(lambda _
;; This is needed because R is run during the check phase and
;; /bin/sh doesn't exist in the build container.
(substitute* "src/unix/sys-unix.c"
(("\"/bin/sh\"")
(string-append "\"" (which "sh") "\"")))
;; This test fails because line numbers are off by two.
(substitute* "tests/reg-packages.R"
(("8 <= print" m) (string-append "## " m)))))
(add-after 'unpack '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\")"))
;; 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")))
;; 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.
;; 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 <- \
;; 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')\"")))
;; 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)))
(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"))))
;; 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"))))
;; The "References" section of this file when converted to
;; package.rds is sometimes stored with a newline, sometimes with
;; a space. We avoid this problem by removing the line break
;; that is suspected to be the culprit.
(substitute* "src/library/methods/DESCRIPTION.in"
(("\\(2008\\)\n") "(2008) ")
((" ``Software") "``Software")
(("Data Analysis:.") "Data Analysis:\n")
(("Programming with R") " Programming with R"))
(substitute* "src/library/tools/DESCRIPTION.in"
(("codetools, methods, xml2, curl, commonmark, knitr, xfun, mathjaxr")
"codetools, methods, xml2, curl, commonmark,
;; The "References" section of this file when converted to
;; package.rds is sometimes stored with a newline, sometimes with
;; a space. We avoid this problem by removing the line break
;; that is suspected to be the culprit.
(substitute* "src/library/methods/DESCRIPTION.in"
(("\\(2008\\)\n") "(2008) ")
((" ``Software") "``Software")
(("Data Analysis:.") "Data Analysis:\n")
(("Programming with R") " Programming with R"))
(substitute* "src/library/tools/DESCRIPTION.in"
(("codetools, methods, xml2, curl, commonmark, knitr, xfun, mathjaxr")
"codetools, methods, xml2, curl, commonmark,
knitr, xfun, mathjaxr"))))
(add-before 'build 'set-locales
(lambda _
(setlocale LC_ALL "C")
(setenv "LC_ALL" "C")))
(add-before 'configure 'set-default-pager
;; Set default pager to "cat", because otherwise it is "false",
;; making "help()" print nothing at all.
(lambda _ (setenv "PAGER" "cat")))
(add-before 'configure 'set-timezone
;; Some tests require the timezone to be set. However, the
;; timezone may not just be "UTC", or else a brittle regression
;; test in reg-tests-1d will fail.
;; We also need TZ during the configure step.
(lambda* (#:key inputs #:allow-other-keys)
(setenv "TZ" "UTC+1")
(setenv "TZDIR"
(search-input-directory inputs
"share/zoneinfo"))))
(add-before 'check 'set-home
;; Some tests require that HOME be set.
(lambda _ (setenv "HOME" "/tmp")))
(add-after 'build 'make-info
(lambda _ (invoke "make" "info")))
(add-after 'build 'install-info
(lambda _ (invoke "make" "install-info"))))
(add-before 'build 'set-locales
(lambda _
(setlocale LC_ALL "C")
(setenv "LC_ALL" "C")))
(add-before 'configure 'set-default-pager
;; Set default pager to "cat", because otherwise it is "false",
;; making "help()" print nothing at all.
(lambda _ (setenv "PAGER" "cat")))
(add-before 'configure 'set-timezone
;; Some tests require the timezone to be set. However, the
;; timezone may not just be "UTC", or else a brittle regression
;; test in reg-tests-1d will fail.
;; We also need TZ during the configure step.
(lambda* (#:key inputs #:allow-other-keys)
(setenv "TZ" "UTC+1")
(setenv "TZDIR"
(search-input-directory inputs
"share/zoneinfo"))))
(add-before 'check 'set-home
;; Some tests require that HOME be set.
(lambda _ (setenv "HOME" "/tmp")))
(add-after 'build 'make-info
(lambda _ (invoke "make" "info")))
(add-after 'build 'install-info
(lambda _ (invoke "make" "install-info"))))
#:configure-flags
`(;; We build the recommended packages here, because they are needed in
;; order to run the test suite. We disable them in the r-minimal
;; package.
"--with-cairo"
"--with-blas=-lopenblas"
"--with-libpng"
"--with-jpeglib"
"--with-libtiff"
"--with-ICU"
"--with-tcltk"
,(string-append "--with-tcl-config="
(assoc-ref %build-inputs "tcl")
#~(list
;; We build the recommended packages here, because they are needed in
;; order to run the test suite. We disable them in the r-minimal
;; package.
"--with-cairo"
"--with-blas=-lopenblas"
"--with-libpng"
"--with-jpeglib"
"--with-libtiff"
"--with-ICU"
"--with-tcltk"
(string-append "--with-tcl-config="
#$(this-package-input "tcl")
"/lib/tclConfig.sh")
,(string-append "--with-tk-config="
(assoc-ref %build-inputs "tk")
(string-append "--with-tk-config="
#$(this-package-input "tk")
"/lib/tkConfig.sh")
"--enable-R-shlib"
"--enable-BLAS-shlib"
"--with-system-tre")))
"--enable-R-shlib"
"--enable-BLAS-shlib"
"--with-system-tre")))
;; R has some support for Java. When the JDK is available at configure
;; time environment variables pointing to the JDK will be recorded under
;; $R_HOME/etc and ./tools/getsp.java will be compiled which is used by "R
@ -443,45 +443,44 @@ available, greatly increasing its breadth and scope.")
(package (inherit r-with-tests)
(name "r-minimal")
(arguments
`(#:tests? #f
,@(substitute-keyword-arguments (package-arguments r-with-tests)
((#:disallowed-references refs '())
(cons perl refs))
((#: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))
((#:phases phases '%standard-phases)
`(modify-phases ,phases
(add-after 'install 'remove-extraneous-references
(lambda* (#:key inputs outputs #:allow-other-keys)
(let ((out (assoc-ref outputs "out")))
(substitute* (string-append out "/lib/R/etc/Makeconf")
(("^# configure.*")
"# Removed to avoid extraneous references\n"))
(substitute* (string-append out "/lib/R/bin/libtool")
(((string-append
"(-L)?("
(format #false
"~a/[^-]+-(~{~a~^|~})-[^/]+"
(%store-directory)
'("bzip2"
"file"
"glibc-utf8-locales"
"graphite2"
"libselinux"
"libsepol"
"perl"
"texinfo"
"texlive-bin"
"util-macros"
"xz"))
"|"
(format #false "~a/[^-]+-glibc-[^-]+-static"
(%store-directory))
")/lib")) ""))))))))))))
(substitute-keyword-arguments (package-arguments r-with-tests)
((#:tests? #f #f) #f)
((#:disallowed-references refs '())
(cons perl refs))
((#: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))
((#:phases phases '%standard-phases)
#~(modify-phases #$phases
(add-after 'install 'remove-extraneous-references
(lambda* (#:key inputs outputs #:allow-other-keys)
(substitute* (string-append #$output "/lib/R/etc/Makeconf")
(("^# configure.*")
"# Removed to avoid extraneous references\n"))
(substitute* (string-append #$output "/lib/R/bin/libtool")
(((string-append
"(-L)?("
(format #false
"~a/[^-]+-(~{~a~^|~})-[^/]+"
(%store-directory)
'("bzip2"
"file"
"glibc-utf8-locales"
"graphite2"
"libselinux"
"libsepol"
"perl"
"texinfo"
"texlive-bin"
"util-macros"
"xz"))
"|"
(format #false "~a/[^-]+-glibc-[^-]+-static"
(%store-directory))
")/lib")) ""))))))))))
(define-public rmath-standalone
(package (inherit r-minimal)