forked from mirrors/nixpkgs
e810fad47a
SVMlight uses a non-standard license [0] that doesn't allow distribution without the author's permission: > The software must not be modified and distributed without prior permission of the author. So remove all code related to it when building the binary package. Use upstream's own script to do it (which they use to create and distribute their own Debian package), with a few fixes. There is still the option of building from source with SVMlight enabled with an override that sets the withSvmLight parameter. If SVMlight is enabled set the license to unfree. Also fix the deprecated gpl3 license to gpl3Plus. [0]: https://github.com/shogun-toolbox/shogun/blob/shogun_6.1.4/doc/license/LICENSE_SVMlight.md
116 lines
3.6 KiB
Nix
116 lines
3.6 KiB
Nix
{ stdenv, lib, fetchFromGitHub, fetchpatch, fetchurl, cmake, ctags, swig
|
|
# data, compression
|
|
, bzip2, curl, hdf5, json_c, xz, lzo, protobuf, snappy
|
|
# maths
|
|
, blas, lapack, eigen, nlopt, lp_solve, colpack, glpk
|
|
# libraries
|
|
, libarchive, libxml2
|
|
# extra support
|
|
, pythonSupport ? true, pythonPackages ? null
|
|
, opencvSupport ? false, opencv ? null
|
|
, withSvmLight ? false
|
|
}:
|
|
|
|
assert pythonSupport -> pythonPackages != null;
|
|
assert opencvSupport -> opencv != null;
|
|
|
|
assert (!blas.isILP64) && (!lapack.isILP64);
|
|
|
|
let
|
|
pname = "shogun";
|
|
version = "6.1.4";
|
|
rxcppVersion = "4.0.0";
|
|
gtestVersion = "1.8.0";
|
|
srcs = {
|
|
toolbox = fetchFromGitHub {
|
|
owner = pname + "-toolbox";
|
|
repo = pname;
|
|
rev = pname + "_" + version;
|
|
sha256 = "05s9dclmk7x5d7wnnj4qr6r6c827m72a44gizcv09lxr28pr9inz";
|
|
fetchSubmodules = true;
|
|
};
|
|
# we need the packed archive
|
|
rxcpp = fetchurl {
|
|
url = "https://github.com/Reactive-Extensions/RxCpp/archive/v${rxcppVersion}.tar.gz";
|
|
sha256 = "0y2isr8dy2n1yjr9c5570kpc9lvdlch6jv0jvw000amwn5d3krsh";
|
|
};
|
|
gtest = fetchurl {
|
|
url = "https://github.com/google/googletest/archive/release-${gtestVersion}.tar.gz";
|
|
sha256 = "1n5p1m2m3fjrjdj752lf92f9wq3pl5cbsfrb49jqbg52ghkz99jq";
|
|
};
|
|
};
|
|
in
|
|
|
|
stdenv.mkDerivation rec {
|
|
|
|
inherit pname version;
|
|
|
|
src = srcs.toolbox;
|
|
|
|
postUnpack = ''
|
|
mkdir -p $sourceRoot/third_party/{rxcpp,gtest}
|
|
ln -s ${srcs.rxcpp} $sourceRoot/third_party/rxcpp/v${rxcppVersion}.tar.gz
|
|
ln -s ${srcs.gtest} $sourceRoot/third_party/gtest/release-${gtestVersion}.tar.gz
|
|
'';
|
|
|
|
# broken
|
|
doCheck = false;
|
|
|
|
patches = [
|
|
(fetchpatch {
|
|
url = "https://github.com/awild82/shogun/commit/365ce4c4c700736d2eec8ba6c975327a5ac2cd9b.patch";
|
|
sha256 = "158hqv4xzw648pmjbwrhxjp7qcppqa7kvriif87gn3zdn711c49s";
|
|
})
|
|
] ++ lib.optional (!withSvmLight) ./svmlight-scrubber.patch;
|
|
|
|
CCACHE_DISABLE="1";
|
|
CCACHE_DIR=".ccache";
|
|
|
|
nativeBuildInputs = [ cmake ];
|
|
buildInputs = with lib; [
|
|
blas lapack bzip2 colpack curl ctags eigen hdf5 json_c lp_solve xz lzo
|
|
protobuf nlopt snappy swig (libarchive.dev) libxml2 lapack glpk
|
|
]
|
|
++ optionals (pythonSupport) (with pythonPackages; [ python ply numpy ])
|
|
++ optional (opencvSupport) opencv;
|
|
|
|
NIX_CFLAGS_COMPILE="-faligned-new";
|
|
|
|
cmakeFlags =
|
|
let
|
|
onOff = b: if b then "ON" else "OFF";
|
|
flag = n: b: "-D"+n+"="+onOff b;
|
|
in
|
|
with lib; [
|
|
(flag "ENABLE_TESTING" doCheck)
|
|
(flag "BUILD_META_EXAMPLES" doCheck)
|
|
(flag "CMAKE_VERBOSE_MAKEFILE:BOOL" doCheck)
|
|
(flag "PythonModular" pythonSupport)
|
|
(flag "OpenCV" opencvSupport)
|
|
(flag "USE_SVMLIGHT" withSvmLight)
|
|
];
|
|
|
|
postPatch = ''
|
|
# Fix preprocessing SVMlight code
|
|
sed -i \
|
|
-e 's@#ifdef SVMLIGHT@#ifdef USE_SVMLIGHT@' \
|
|
-e '/^#ifdef USE_SVMLIGHT/,/^#endif/ s@#endif@#endif //USE_SVMLIGHT@' \
|
|
src/shogun/kernel/string/CommUlongStringKernel.cpp
|
|
sed -i -e 's/#if USE_SVMLIGHT/#ifdef USE_SVMLIGHT/' src/interfaces/swig/Machine.i
|
|
sed -i -e 's@// USE_SVMLIGHT@//USE_SVMLIGHT@' src/interfaces/swig/Transfer.i
|
|
sed -i -e 's@/\* USE_SVMLIGHT \*/@//USE_SVMLIGHT@' src/interfaces/swig/Transfer_includes.i
|
|
'' + lib.optionalString (!withSvmLight) ''
|
|
# Run SVMlight scrubber
|
|
patchShebangs scripts/light-scrubber.sh
|
|
echo "removing SVMlight code"
|
|
./scripts/light-scrubber.sh
|
|
'';
|
|
|
|
meta = with lib; {
|
|
description = "A toolbox which offers a wide range of efficient and unified machine learning methods";
|
|
homepage = "http://shogun-toolbox.org/";
|
|
license = if withSvmLight then licenses.unfree else licenses.gpl3Plus;
|
|
maintainers = with maintainers; [ edwtjo ];
|
|
};
|
|
}
|