On Friday, January 12th, 2024 at 16:11, Ivan Krylov <ikry...@disroot.org> wrote:
> unlike `which`, `command -v` returns names of shell builtins if > something is both an executable and a builtin. So for things like `[`, > Sys.which would behave differently if changed to use command -v Then can we revisit my simple fix, which refers to `which` through a symlink instead of a hard-coded absolute in an R-source file: >From 3f2b1b6c94460fd4d3e9f03c9f17a25db2d2b473 Mon Sep 17 00:00:00 2001 From: Harmen Stoppels <m...@harmenstoppels.nl> Date: Wed, 10 Jan 2024 12:40:40 +0100 Subject: [PATCH] base: use a symlink for which instead of hard-coded string --- share/make/basepkg.mk | 8 ++++---- src/library/base/R/unix/system.unix.R | 6 +++--- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/share/make/basepkg.mk b/share/make/basepkg.mk index c0a69c8a0af..4cf63878709 100644 --- a/share/make/basepkg.mk +++ b/share/make/basepkg.mk @@ -72,16 +72,16 @@ mkRbase: else \ cat $(RSRC) > "$${f}"; \ fi; \ - f2=$${TMPDIR:-/tmp}/R2$$$$; \ - sed -e "s:@WHICH@:${WHICH}:" "$${f}" > "$${f2}"; \ - rm -f "$${f}"; \ - $(SHELL) $(top_srcdir)/tools/move-if-change "$${f2}" all.R) + $(SHELL) $(top_srcdir)/tools/move-if-change "$${f}" all.R) @if ! test -f $(top_builddir)/library/$(pkg)/R/$(pkg); then \ $(INSTALL_DATA) all.R $(top_builddir)/library/$(pkg)/R/$(pkg); \ else if test all.R -nt $(top_builddir)/library/$(pkg)/R/$(pkg); then \ $(INSTALL_DATA) all.R $(top_builddir)/library/$(pkg)/R/$(pkg); \ fi \ fi + @if ! test -f $(top_builddir)/library/$(pkg)/R/which; then \ + cd $(top_builddir)/library/$(pkg)/R/ && $(LN_S) $(WHICH) which; \ + fi mkdesc: @if test -f DESCRIPTION; then \ diff --git a/src/library/base/R/unix/system.unix.R b/src/library/base/R/unix/system.unix.R index 3bb7d0cb27c..78271c8c12c 100644 --- a/src/library/base/R/unix/system.unix.R +++ b/src/library/base/R/unix/system.unix.R @@ -114,9 +114,9 @@ system2 <- function(command, args = character(), Sys.which <- function(names) { res <- character(length(names)); names(res) <- names - ## hopefully configure found [/usr]/bin/which - which <- "@WHICH@" - if (!nzchar(which)) { + which <- file.path(R.home(), "library", "base", "R", "which") + ## which should be a symlink to the system's which + if (!file.exists(which)) { warning("'which' was not found on this platform") return(res) } ______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel