Skip to content

Commit

Permalink
Merge pull request #51581 from joachifm/rWrapper-local-runCommand
Browse files Browse the repository at this point in the history
Implement R wrappers as local-only runCommand
  • Loading branch information
joachifm committed Dec 7, 2018
2 parents b89978c + 21d83e5 commit f0dbbdf
Show file tree
Hide file tree
Showing 2 changed files with 33 additions and 41 deletions.
38 changes: 17 additions & 21 deletions pkgs/development/r-modules/wrapper-rstudio.nix
Original file line number Diff line number Diff line change
@@ -1,15 +1,15 @@
{ stdenv, R, rstudio, makeWrapper, recommendedPackages, packages, qtbase }:
{ lib, runCommand, R, rstudio, makeWrapper, recommendedPackages, packages, qtbase }:

let
qtVersion = with stdenv.lib.versions; "${major qtbase.version}.${minor qtbase.version}";
qtVersion = with lib.versions; "${major qtbase.version}.${minor qtbase.version}";
in
stdenv.mkDerivation rec {
runCommand (rstudio.name + "-wrapper") {
preferLocalBuild = true;
allowSubstitutes = false;

name = rstudio.name + "-wrapper";
nativeBuildInputs = [makeWrapper];

buildInputs = [makeWrapper R rstudio] ++ recommendedPackages ++ packages;

unpackPhase = ":";
buildInputs = [R rstudio] ++ recommendedPackages ++ packages;

# rWrapper points R to a specific set of packages by using a wrapper
# (as in https://nixos.org/nixpkgs/manual/#r-packages) which sets
Expand All @@ -20,18 +20,14 @@ stdenv.mkDerivation rec {
# into an R file (fixLibsR) which achieves the same effect, then
# uses R_PROFILE_USER to load this code at startup in RStudio.
fixLibsR = "fix_libs.R";
installPhase = ''
mkdir $out
echo "# Autogenerated by wrapper-rstudio.nix from R_LIBS_SITE" > $out/${fixLibsR}
echo -n ".libPaths(c(.libPaths(), \"" >> $out/${fixLibsR}
echo -n $R_LIBS_SITE | sed -e 's/:/", "/g' >> $out/${fixLibsR}
echo -n "\"))" >> $out/${fixLibsR}
echo >> $out/${fixLibsR}
makeWrapper ${rstudio}/bin/rstudio $out/bin/rstudio --set R_PROFILE_USER $out/${fixLibsR} \
--prefix QT_PLUGIN_PATH : ${qtbase}/lib/qt-${qtVersion}/plugins
'';

meta = {
platforms = stdenv.lib.platforms.unix;
};
}
''
mkdir $out
echo "# Autogenerated by wrapper-rstudio.nix from R_LIBS_SITE" > $out/$fixLibsR
echo -n ".libPaths(c(.libPaths(), \"" >> $out/$fixLibsR
echo -n $R_LIBS_SITE | sed -e 's/:/", "/g' >> $out/$fixLibsR
echo -n "\"))" >> $out/$fixLibsR
echo >> $out/$fixLibsR
makeWrapper ${rstudio}/bin/rstudio $out/bin/rstudio --set R_PROFILE_USER $out/$fixLibsR \
--prefix QT_PLUGIN_PATH : ${qtbase}/lib/qt-${qtVersion}/plugins
''
36 changes: 16 additions & 20 deletions pkgs/development/r-modules/wrapper.nix
Original file line number Diff line number Diff line change
@@ -1,25 +1,21 @@
{ stdenv, R, makeWrapper, recommendedPackages, packages }:
{ runCommand, R, makeWrapper, recommendedPackages, packages }:

stdenv.mkDerivation {
name = R.name + "-wrapper";
runCommand (R.name + "-wrapper") {
preferLocalBuild = true;
allowSubstitutes = false;

buildInputs = [makeWrapper R] ++ recommendedPackages ++ packages;
buildInputs = [R] ++ recommendedPackages ++ packages;

# Make the list of recommended R packages accessible to other packages such as rpy2
passthru.recommendedPackages = recommendedPackages;

unpackPhase = ":";
nativeBuildInputs = [makeWrapper];

installPhase = ''
mkdir -p $out/bin
cd ${R}/bin
for exe in *; do
makeWrapper ${R}/bin/$exe $out/bin/$exe \
--prefix "R_LIBS_SITE" ":" "$R_LIBS_SITE"
done
'';

meta = {
platforms = stdenv.lib.platforms.unix;
};
# Make the list of recommended R packages accessible to other packages such as rpy2
passthru = { inherit recommendedPackages; };
}
''
mkdir -p $out/bin
cd ${R}/bin
for exe in *; do
makeWrapper ${R}/bin/$exe $out/bin/$exe \
--prefix "R_LIBS_SITE" ":" "$R_LIBS_SITE"
done
''

0 comments on commit f0dbbdf

Please sign in to comment.