diff options
Diffstat (limited to 'pkgs/applications/editors/rstudio/default.nix')
-rw-r--r-- | pkgs/applications/editors/rstudio/default.nix | 302 |
1 files changed, 161 insertions, 141 deletions
diff --git a/pkgs/applications/editors/rstudio/default.nix b/pkgs/applications/editors/rstudio/default.nix index 62c3a93f76b4..d703198fa775 100644 --- a/pkgs/applications/editors/rstudio/default.nix +++ b/pkgs/applications/editors/rstudio/default.nix @@ -1,4 +1,5 @@ { lib +, stdenv , mkDerivation , fetchurl , fetchpatch @@ -30,6 +31,9 @@ , nodejs , mkYarnModules , qmake +, server ? false # build server version +, sqlite +, pam }: let @@ -61,149 +65,165 @@ let panmirrorModules = mkYarnModules { inherit pname version; packageJSON = ./package.json; - yarnLock = ./yarn.lock; + yarnLock = ./yarn.lock; yarnNix = ./yarndeps.nix; }; + description = "Set of integrated tools for the R language"; in -mkDerivation rec { - inherit pname version src RSTUDIO_VERSION_MAJOR RSTUDIO_VERSION_MINOR RSTUDIO_VERSION_PATCH; - - nativeBuildInputs = [ - cmake - unzip - ant - jdk - makeWrapper - pandoc - nodejs - copyDesktopItems - ]; - - buildInputs = [ - boost - zlib - openssl - R - qtbase - qtxmlpatterns - qtsensors - qtwebengine - qtwebchannel - libuuid - libyamlcpp - soci - postgresql - ]; - - cmakeFlags = [ - "-DRSTUDIO_TARGET=Desktop" - "-DCMAKE_BUILD_TYPE=Release" - "-DQT_QMAKE_EXECUTABLE=${qmake}/bin/qmake" - "-DRSTUDIO_USE_SYSTEM_SOCI=ON" - "-DRSTUDIO_USE_SYSTEM_BOOST=ON" - "-DRSTUDIO_USE_SYSTEM_YAML_CPP=ON" - "-DPANDOC_VERSION=${pandoc.version}" - "-DCMAKE_INSTALL_PREFIX=${placeholder "out"}/lib/rstudio" - ]; - - # Hack RStudio to only use the input R and provided libclang. - patches = [ - ./r-location.patch - ./clang-location.patch - # postFetch doesn't work with this | error: unexpected end-of-file - # replacing /usr/bin/node is done in postPatch - # https://src.fedoraproject.org/rpms/rstudio/tree/rawhide - (fetchpatch { - name = "system-node.patch"; - url = "https://src.fedoraproject.org/rpms/rstudio/raw/5bda2e290c9e72305582f2011040938d3e356906/f/0004-use-system-node.patch"; - sha256 = "sha256-P1Y07RB/ceFNa749nyBUWSE41eiiZgt43zVcmahvfZM="; - }) - ]; - - postPatch = '' - substituteInPlace src/cpp/core/r_util/REnvironmentPosix.cpp --replace '@R@' ${R} - - substituteInPlace src/cpp/CMakeLists.txt \ - --replace 'SOCI_LIBRARY_DIR "/usr/lib"' 'SOCI_LIBRARY_DIR "${soci}/lib"' - - substituteInPlace src/gwt/build.xml \ - --replace '/usr/bin/node' '${nodejs}/bin/node' - - substituteInPlace src/cpp/core/libclang/LibClang.cpp \ - --replace '@libclang@' ${llvmPackages.libclang.lib} \ - --replace '@libclang.so@' ${llvmPackages.libclang.lib}/lib/libclang.so - - substituteInPlace src/cpp/session/include/session/SessionConstants.hpp \ - --replace "bin/pandoc" "${pandoc}/bin/pandoc" - ''; - - hunspellDictionaries = with lib; filter isDerivation (unique (attrValues hunspellDicts)); - # These dicts contain identically-named dict files, so we only keep the - # -large versions in case of clashes - largeDicts = with lib; filter (d: hasInfix "-large-wordlist" d) hunspellDictionaries; - otherDicts = with lib; filter - (d: !(hasAttr "dictFileName" d && - elem d.dictFileName (map (d: d.dictFileName) largeDicts))) - hunspellDictionaries; - dictionaries = largeDicts ++ otherDicts; - - preConfigure = '' - mkdir dependencies/dictionaries - for dict in ${builtins.concatStringsSep " " dictionaries}; do - for i in "$dict/share/hunspell/"*; do - ln -s $i dependencies/dictionaries/ +(if server then stdenv.mkDerivation else mkDerivation) + (rec { + inherit pname version src RSTUDIO_VERSION_MAJOR RSTUDIO_VERSION_MINOR RSTUDIO_VERSION_PATCH; + + nativeBuildInputs = [ + cmake + unzip + ant + jdk + makeWrapper + pandoc + nodejs + ] ++ lib.optional (!server) [ + copyDesktopItems + ]; + + buildInputs = [ + boost + zlib + openssl + R + libuuid + libyamlcpp + soci + postgresql + ] ++ (if server then [ + sqlite.dev + pam + ] else [ + qtbase + qtxmlpatterns + qtsensors + qtwebengine + qtwebchannel + ]); + + cmakeFlags = [ + "-DRSTUDIO_TARGET=${if server then "Server" else "Desktop"}" + "-DCMAKE_BUILD_TYPE=Release" + "-DRSTUDIO_USE_SYSTEM_SOCI=ON" + "-DRSTUDIO_USE_SYSTEM_BOOST=ON" + "-DRSTUDIO_USE_SYSTEM_YAML_CPP=ON" + "-DPANDOC_VERSION=${pandoc.version}" + "-DCMAKE_INSTALL_PREFIX=${placeholder "out"}/lib/rstudio" + ] ++ lib.optional (!server) [ + "-DQT_QMAKE_EXECUTABLE=${qmake}/bin/qmake" + ]; + + # Hack RStudio to only use the input R and provided libclang. + patches = [ + ./r-location.patch + ./clang-location.patch + # postFetch doesn't work with this | error: unexpected end-of-file + # replacing /usr/bin/node is done in postPatch + # https://src.fedoraproject.org/rpms/rstudio/tree/rawhide + (fetchpatch { + name = "system-node.patch"; + url = "https://src.fedoraproject.org/rpms/rstudio/raw/5bda2e290c9e72305582f2011040938d3e356906/f/0004-use-system-node.patch"; + sha256 = "sha256-P1Y07RB/ceFNa749nyBUWSE41eiiZgt43zVcmahvfZM="; + }) + ]; + + postPatch = '' + substituteInPlace src/cpp/core/r_util/REnvironmentPosix.cpp --replace '@R@' ${R} + + substituteInPlace src/cpp/CMakeLists.txt \ + --replace 'SOCI_LIBRARY_DIR "/usr/lib"' 'SOCI_LIBRARY_DIR "${soci}/lib"' + + substituteInPlace src/gwt/build.xml \ + --replace '/usr/bin/node' '${nodejs}/bin/node' + + substituteInPlace src/cpp/core/libclang/LibClang.cpp \ + --replace '@libclang@' ${llvmPackages.libclang.lib} \ + --replace '@libclang.so@' ${llvmPackages.libclang.lib}/lib/libclang.so + + substituteInPlace src/cpp/session/include/session/SessionConstants.hpp \ + --replace "bin/pandoc" "${pandoc}/bin/pandoc" + ''; + + hunspellDictionaries = with lib; filter isDerivation (unique (attrValues hunspellDicts)); + # These dicts contain identically-named dict files, so we only keep the + # -large versions in case of clashes + largeDicts = with lib; filter (d: hasInfix "-large-wordlist" d) hunspellDictionaries; + otherDicts = with lib; filter + (d: !(hasAttr "dictFileName" d && + elem d.dictFileName (map (d: d.dictFileName) largeDicts))) + hunspellDictionaries; + dictionaries = largeDicts ++ otherDicts; + + preConfigure = '' + mkdir dependencies/dictionaries + for dict in ${builtins.concatStringsSep " " dictionaries}; do + for i in "$dict/share/hunspell/"*; do + ln -s $i dependencies/dictionaries/ + done done - done - - unzip -q ${mathJaxSrc} -d dependencies/mathjax-27 - - mkdir -p dependencies/pandoc/${pandoc.version} - cp ${pandoc}/bin/pandoc dependencies/pandoc/${pandoc.version}/pandoc - - cp -r ${rsconnectSrc} dependencies/rsconnect - ( cd dependencies && ${R}/bin/R CMD build -d --no-build-vignettes rsconnect ) - - cp -r "${panmirrorModules}" src/gwt/panmirror/src/editor/node_modules - ''; - - postInstall = '' - mkdir -p $out/share/icons/hicolor/48x48/apps $out/bin - ln $out/lib/rstudio/rstudio.png $out/share/icons/hicolor/48x48/apps - - for f in {diagnostics,rpostback,rstudio}; do - ln -s $out/lib/rstudio/bin/$f $out/bin - done - - for f in .gitignore .Rbuildignore LICENSE README; do - find . -name $f -delete - done - rm -r $out/lib/rstudio/{INSTALL,COPYING,NOTICE,README.md,SOURCE,VERSION} - rm -r $out/lib/rstudio/bin/{pandoc/pandoc,pandoc} - ''; - - qtWrapperArgs = [ - "--suffix PATH : ${lib.makeBinPath [ gnumake ]}" - ]; - - desktopItems = [ - (makeDesktopItem { - name = "${pname}"; - exec = "rstudio %F"; - icon = "rstudio"; - desktopName = "RStudio"; - genericName = "IDE"; - comment = meta.description; - categories = "Development;"; - mimeType = "text/x-r-source;text/x-r;text/x-R;text/x-r-doc;text/x-r-sweave;text/x-r-markdown;text/x-r-html;text/x-r-presentation;application/x-r-data;application/x-r-project;text/x-r-history;text/x-r-profile;text/x-tex;text/x-markdown;text/html;text/css;text/javascript;text/x-chdr;text/x-csrc;text/x-c++hdr;text/x-c++src;"; - }) - ]; - - meta = with lib; { - description = "Set of integrated tools for the R language"; - homepage = "https://www.rstudio.com/"; - license = licenses.agpl3Only; - maintainers = with maintainers; [ ciil ]; - platforms = platforms.linux; - }; -} + + unzip -q ${mathJaxSrc} -d dependencies/mathjax-27 + + mkdir -p dependencies/pandoc/${pandoc.version} + cp ${pandoc}/bin/pandoc dependencies/pandoc/${pandoc.version}/pandoc + + cp -r ${rsconnectSrc} dependencies/rsconnect + ( cd dependencies && ${R}/bin/R CMD build -d --no-build-vignettes rsconnect ) + + cp -r "${panmirrorModules}" src/gwt/panmirror/src/editor/node_modules + ''; + + postInstall = '' + mkdir -p $out/bin $out/share + + ${lib.optionalString (!server) '' + mkdir -p $out/share/icons/hicolor/48x48/apps + ln $out/lib/rstudio/rstudio.png $out/share/icons/hicolor/48x48/apps + ''} + + for f in {${if server + then "crash-handler-proxy,postback,r-ldpath,rpostback,rserver,rserver-pam,rsession,rstudio-server" + else "diagnostics,rpostback,rstudio"}}; do + ln -s $out/lib/rstudio/bin/$f $out/bin + done + + for f in .gitignore .Rbuildignore LICENSE README; do + find . -name $f -delete + done + rm -r $out/lib/rstudio/{INSTALL,COPYING,NOTICE,README.md,SOURCE,VERSION} + rm -r $out/lib/rstudio/bin/{pandoc/pandoc,pandoc} + ''; + + meta = with lib; { + inherit description; + homepage = "https://www.rstudio.com/"; + license = licenses.agpl3Only; + maintainers = with maintainers; [ ciil cfhammill ]; + platforms = platforms.linux; + }; + + passthru = { inherit server; }; + } // lib.optionalAttrs (!server) { + qtWrapperArgs = [ + "--suffix PATH : ${lib.makeBinPath [ gnumake ]}" + ]; + + desktopItems = [ + (makeDesktopItem { + name = pname; + exec = "rstudio %F"; + icon = "rstudio"; + desktopName = "RStudio"; + genericName = "IDE"; + comment = description; + categories = "Development;"; + mimeType = "text/x-r-source;text/x-r;text/x-R;text/x-r-doc;text/x-r-sweave;text/x-r-markdown;text/x-r-html;text/x-r-presentation;application/x-r-data;application/x-r-project;text/x-r-history;text/x-r-profile;text/x-tex;text/x-markdown;text/html;text/css;text/javascript;text/x-chdr;text/x-csrc;text/x-c++hdr;text/x-c++src;"; + }) + ]; + }) |