about summary refs log tree commit diff
path: root/pkgs/development/python-modules/rpy2/2.nix
diff options
context:
space:
mode:
Diffstat (limited to 'pkgs/development/python-modules/rpy2/2.nix')
-rw-r--r--pkgs/development/python-modules/rpy2/2.nix108
1 files changed, 108 insertions, 0 deletions
diff --git a/pkgs/development/python-modules/rpy2/2.nix b/pkgs/development/python-modules/rpy2/2.nix
new file mode 100644
index 000000000000..aef184d4afc2
--- /dev/null
+++ b/pkgs/development/python-modules/rpy2/2.nix
@@ -0,0 +1,108 @@
+{ lib
+, python
+, buildPythonPackage
+, fetchPypi
+, isPyPy
+, isPy27
+, readline
+, R
+, rWrapper
+, rPackages
+, pcre
+, lzma
+, bzip2
+, zlib
+, icu
+, singledispatch
+, six
+, jinja2
+, pytz
+, numpy
+, pytest
+, mock
+, extraRPackages ? []
+}:
+
+buildPythonPackage rec {
+    version = "2.8.6"; # python2 support dropped in 2.9.x
+    pname = "rpy2";
+    disabled = isPyPy;
+    src = fetchPypi {
+      inherit version pname;
+      sha256 = "162zki5c1apgv6qbafi7n66y4hgpgp43xag7q75qb6kv99ri6k80";
+    };
+    buildInputs = [
+      readline
+      R
+      pcre
+      lzma
+      bzip2
+      zlib
+      icu
+    ] ++ (with rPackages; [
+      # packages expected by the test framework
+      ggplot2
+      dplyr
+      RSQLite
+      broom
+      DBI
+      dbplyr
+      hexbin
+      lme4
+      tidyr
+
+      # is in upstream's `requires` although it shouldn't be -- this is easier than patching it away
+      pytest
+    ]) ++ extraRPackages ++ rWrapper.recommendedPackages;
+
+    nativeBuildInputs = [
+      R # needed at setup time to detect R_HOME (alternatively set R_HOME explicitly)
+    ];
+
+    patches = [
+      # R_LIBS_SITE is used by the nix r package to point to the installed R libraries.
+      # This patch sets R_LIBS_SITE when rpy2 is imported.
+      ./r-libs-site.patch
+    ];
+    postPatch = ''
+      substituteInPlace ${ if isPy27 then "rpy/rinterface/__init__.py" else "rpy2/rinterface_lib/embedded.py" } --replace '@NIX_R_LIBS_SITE@' "$R_LIBS_SITE"
+    '';
+
+    doPatchelf = false; # fails because of "missing filename"
+    patchelfPhase = "";
+
+    propagatedBuildInputs = [
+      singledispatch
+      six
+      jinja2
+      pytz
+      numpy
+    ];
+
+    checkInputs = [
+      pytest
+      mock
+    ];
+    # One remaining test failure caused by different unicode encoding.
+    # https://bitbucket.org/rpy2/rpy2/issues/488
+    doCheck = false;
+    checkPhase = ''
+      ${python.interpreter} -m 'rpy2'
+    '';
+
+    # For some reason libreadline.so is not found. Curiously `ldd _rinterface.so | grep readline` shows two readline entries:
+    # libreadline.so.6 => not found
+    # libreadline.so.6 => /nix/store/z2zhmrg6jcrn5iq2779mav0nnq4vm2q6-readline-6.3p08/lib/libreadline.so.6 (0x00007f333ac43000)
+    # There must be a better way to fix this, but I don't know it.
+    postFixup = ''
+      patchelf --add-needed ${readline}/lib/libreadline.so "$out/${python.sitePackages}/rpy2/rinterface/"_rinterface*.so
+    '';
+
+    meta = {
+      homepage = http://rpy.sourceforge.net/rpy2;
+      description = "Python interface to R";
+      license = lib.licenses.gpl2Plus;
+      platforms = lib.platforms.unix;
+      maintainers = with lib.maintainers; [ joelmo ];
+    };
+  }