From 7b39a5b06e7454a406e5268dd4db821f2b37601b Mon Sep 17 00:00:00 2001 From: agw Date: Tue, 1 Sep 2026 21:55:00 +0200 Subject: [PATCH] Fix R bundling: SIGPIPE abort and wrong R_HOME path Two bugs found by the first real build: - 'R --version | head -1' aborted the script with exit 141 under 'set -o pipefail': head closes the pipe and R dies of SIGPIPE. Use 'sed -n 1p', which consumes all input. - R installed to lib64/R, not the lib/R the script assumed. Pin --libdir and ask 'R RHOME' for the real path instead of guessing. Also stop exporting R_HOME. R.cmake warns that a set R_HOME makes R emit 'WARNING: ignoring environment value of R_HOME', which corrupts the output cmake parses; CUSTOM_R_PATH is the supported way to select an R. --- build/build-jasp.sh | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/build/build-jasp.sh b/build/build-jasp.sh index 91fe7c1..1dc17fa 100755 --- a/build/build-jasp.sh +++ b/build/build-jasp.sh @@ -99,9 +99,13 @@ tar -xzf "R-${R_VERSION}.tar.gz" cd "R-${R_VERSION}" # --enable-R-shlib is required: JASP embeds R through RInside/libR. -# rpath is set to $ORIGIN-relative so the tree stays relocatable after install. +# --libdir is pinned so R lands in lib/R rather than the lib64/R that Arch's +# config.site would otherwise pick, which keeps the rpath below predictable. +# The install prefix equals the final install path, so the rpath stays valid +# once the tarball is unpacked on the user's machine. ./configure \ --prefix="${R_HOME_DIR}" \ + --libdir="${R_HOME_DIR}/lib" \ --enable-R-shlib \ --enable-memory-profiling \ --with-blas \ @@ -112,9 +116,14 @@ cd "R-${R_VERSION}" make -j"$JOBS" make install -export R_HOME="${R_HOME_DIR}/lib/R" export PATH="${R_HOME_DIR}/bin:${PATH}" -R --version | head -1 +# Ask R where it actually put itself rather than assuming lib vs lib64. +# Deliberately NOT exported: R.cmake notes that a set R_HOME makes R print +# "WARNING: ignoring environment value of R_HOME", which corrupts the output it +# parses. CUSTOM_R_PATH is the supported way to point JASP at a specific R. +JASP_R_HOME="$("${R_HOME_DIR}/bin/R" RHOME)" +log "bundled R_HOME is ${JASP_R_HOME}" +"${R_HOME_DIR}/bin/R" --version | sed -n 1p || true # ------------------------------------------------------------------- checkout log "cloning jasp-desktop $JASP_TAG" @@ -140,7 +149,7 @@ cmake -S "$SRC_DIR" -B "$BUILD_DIR" -G Ninja \ -DCMAKE_BUILD_TYPE=Release \ -DCMAKE_INSTALL_PREFIX="$PREFIX" \ -DLINUX_LOCAL_BUILD=OFF \ - -DCUSTOM_R_PATH="${R_HOME}" \ + -DCUSTOM_R_PATH="${JASP_R_HOME}" \ -Wno-dev log "compiling JASP (-j$JOBS)"