about summary refs log tree commit diff
path: root/pkgs/applications/science/machine-learning/shogun/default.nix
diff options
context:
space:
mode:
Diffstat (limited to 'pkgs/applications/science/machine-learning/shogun/default.nix')
-rw-r--r--pkgs/applications/science/machine-learning/shogun/default.nix62
1 files changed, 45 insertions, 17 deletions
diff --git a/pkgs/applications/science/machine-learning/shogun/default.nix b/pkgs/applications/science/machine-learning/shogun/default.nix
index 55bf4378dde22..06a799b5182ec 100644
--- a/pkgs/applications/science/machine-learning/shogun/default.nix
+++ b/pkgs/applications/science/machine-learning/shogun/default.nix
@@ -6,6 +6,7 @@
   # build
 , cmake
 , ctags
+, pythonPackages
 , swig
   # math
 , eigen
@@ -30,7 +31,6 @@
 , colpack
   # extra support
 , pythonSupport ? true
-, pythonPackages ? null
 , opencvSupport ? false
 , opencv ? null
 , withSvmLight ? false
@@ -56,7 +56,8 @@ let
       sha256 = "05s9dclmk7x5d7wnnj4qr6r6c827m72a44gizcv09lxr28pr9inz";
       fetchSubmodules = true;
     };
-    # we need the packed archive
+
+    # The CMake external projects expect the packed archives
     rxcpp = fetchurl {
       url = "https://github.com/Reactive-Extensions/RxCpp/archive/v${rxcppVersion}.tar.gz";
       sha256 = "0y2isr8dy2n1yjr9c5570kpc9lvdlch6jv0jvw000amwn5d3krsh";
@@ -71,16 +72,33 @@ in
 stdenv.mkDerivation rec {
   inherit pname version;
 
+  outputs = [ "out" "dev" "doc" ];
+
   src = srcs.toolbox;
 
   patches = [
+    # Fix compile errors with json-c
+    # https://github.com/shogun-toolbox/shogun/pull/4104
     (fetchpatch {
-      url = "https://github.com/awild82/shogun/commit/365ce4c4c700736d2eec8ba6c975327a5ac2cd9b.patch";
+      url = "https://github.com/shogun-toolbox/shogun/commit/365ce4c4c700736d2eec8ba6c975327a5ac2cd9b.patch";
       sha256 = "158hqv4xzw648pmjbwrhxjp7qcppqa7kvriif87gn3zdn711c49s";
     })
+
+    # Fix compile errors with GCC 9+
+    # https://github.com/shogun-toolbox/shogun/pull/4811
+    (fetchpatch {
+      url = "https://github.com/shogun-toolbox/shogun/commit/c8b670be4790e0f06804b048a6f3d77c17c3ee95.patch";
+      sha256 = "sha256-MxsR3Y2noFQevfqWK3nmX5iK4OVWeKBl5tfeDNgjcXk=";
+    })
+    (fetchpatch {
+      url = "https://github.com/shogun-toolbox/shogun/commit/5aceefd9fb0e2132c354b9a0c0ceb9160cc9b2f7.patch";
+      sha256 = "sha256-AgJJKQA8vc5oKaTQDqMdwBR4hT4sn9+uW0jLe7GteJw=";
+    })
+
   ] ++ lib.optional (!withSvmLight) ./svmlight-scrubber.patch;
 
-  nativeBuildInputs = [ cmake ];
+  nativeBuildInputs = [ cmake swig ctags ]
+    ++ (with pythonPackages; [ python jinja2 ply ]);
 
   buildInputs = [
     eigen
@@ -100,34 +118,37 @@ stdenv.mkDerivation rec {
     nlopt
     lp_solve
     colpack
-    ctags
-    swig
-  ] ++ lib.optionals pythonSupport (with pythonPackages; [ python ply numpy ])
+  ] ++ lib.optionals pythonSupport (with pythonPackages; [ python numpy ])
     ++ lib.optional opencvSupport opencv;
 
   cmakeFlags = let
     enableIf = cond: if cond then "ON" else "OFF";
   in [
-    "-DBUILD_META_EXAMPLES=${enableIf doCheck}"
-    "-DCMAKE_VERBOSE_MAKEFILE=${enableIf doCheck}"
+    "-DBUILD_META_EXAMPLES=ON"
+    "-DCMAKE_DISABLE_FIND_PACKAGE_ARPACK=ON"
+    "-DCMAKE_DISABLE_FIND_PACKAGE_ARPREC=ON"
+    "-DCMAKE_DISABLE_FIND_PACKAGE_CPLEX=ON"
+    "-DCMAKE_DISABLE_FIND_PACKAGE_Mosek=ON"
+    "-DCMAKE_DISABLE_FIND_PACKAGE_TFLogger=ON"
+    "-DCMAKE_DISABLE_FIND_PACKAGE_ViennaCL=ON"
+    "-DCMAKE_SKIP_BUILD_RPATH=OFF"
+    "-DCMAKE_CTEST_ARGUMENTS='--exclude-regex;TrainedModelSerialization'"  # Sporadic segfault
     "-DENABLE_TESTING=${enableIf doCheck}"
+    "-DDISABLE_META_INTEGRATION_TESTS=ON"
+    "-DTRAVIS_DISABLE_META_CPP=ON"
     "-DPythonModular=${enableIf pythonSupport}"
     "-DOpenCV=${enableIf opencvSupport}"
     "-DUSE_SVMLIGHT=${enableIf withSvmLight}"
   ];
 
-  CCACHE_DISABLE="1";
-  CCACHE_DIR=".ccache";
-
-  NIX_CFLAGS_COMPILE="-faligned-new";
+  CXXFLAGS = "-faligned-new";
 
-  # broken
-  doCheck = false;
+  doCheck = true;
 
   postUnpack = ''
-    mkdir -p $sourceRoot/third_party/{rxcpp,gtest}
+    mkdir -p $sourceRoot/third_party/{rxcpp,GoogleMock}
     ln -s ${srcs.rxcpp} $sourceRoot/third_party/rxcpp/v${rxcppVersion}.tar.gz
-    ln -s ${srcs.gtest} $sourceRoot/third_party/gtest/release-${gtestVersion}.tar.gz
+    ln -s ${srcs.gtest} $sourceRoot/third_party/GoogleMock/release-${gtestVersion}.tar.gz
   '';
 
   postPatch = ''
@@ -146,6 +167,13 @@ stdenv.mkDerivation rec {
     ./scripts/light-scrubber.sh
   '';
 
+  postInstall = ''
+    mkdir -p $doc/share/doc/shogun/examples
+    mv $out/share/shogun/examples/cpp $doc/share/doc/shogun/examples
+    cp ../examples/undocumented/libshogun/*.cpp $doc/share/doc/shogun/examples/cpp
+    rm -r $out/share
+  '';
+
   meta = with lib; {
     description = "A toolbox which offers a wide range of efficient and unified machine learning methods";
     homepage = "http://shogun-toolbox.org/";