Commit a74746c0 authored by Emmanuel Rosa's avatar Emmanuel Rosa
Browse files

weka: enhance package

- Add .desktop entries to launch application and open documention.
- Add weka-java script to provide access to WEKA cli.
- Add weka-home script to write path to WEKA share directory to stdout.
- Add ability to set the max. memory allocation pool
parent eaee7b7a
Loading
Loading
Loading
Loading
+59 −2
Original line number Diff line number Diff line
@@ -5,6 +5,11 @@
  jre,
  unzip,
  makeWrapper,
  makeDesktopItem,
  copyDesktopItems,
  xdg-utils,
  imagemagick,
  maxMemoryAllocationPool ? "1000M",
}:

stdenv.mkDerivation rec {
@@ -19,18 +24,70 @@ stdenv.mkDerivation rec {
  nativeBuildInputs = [
    makeWrapper
    unzip
  ];
    imagemagick
  ] ++ lib.optionals stdenv.hostPlatform.isLinux [ copyDesktopItems ];

  # The -Xmx1000M comes suggested from their download page:
  # https://www.cs.waikato.ac.nz/ml/weka/downloading.html
  installPhase = ''
    runHook preInstall

    mkdir -pv $out/share/weka
    mkdir -p $out/share/icons/hicolor
    cp -Rv * $out/share/weka

    makeWrapper ${jre}/bin/java $out/bin/weka \
      --add-flags "-Xmx1000M -jar $out/share/weka/weka.jar"
      --add-flags "-Xmx${maxMemoryAllocationPool} -jar $out/share/weka/weka.jar"

    makeWrapper ${jre}/bin/java $out/bin/weka-java \
      --add-flags "-Xmx${maxMemoryAllocationPool} -cp $out/share/weka/weka.jar"

    ${lib.optionalString stdenv.hostPlatform.isLinux "
        makeWrapper ${xdg-utils}/bin/xdg-open $out/bin/weka-doc --add-flags $out/share/weka/documentation.html
    "}

    cat << EOF > $out/bin/weka-home
    #!${stdenv.shell}
    echo -n $out/share/weka
    EOF

    chmod ugo+x $out/bin/weka-home

    for n in 16 24 32 48 64 96 128 256; do
      size=$n"x"$n
      mkdir -p $out/share/icons/hicolor/$size/apps
      magick convert $out/share/weka/weka.gif -resize $size $out/share/icons/hicolor/$size/apps/weka.png
    done;

    runHook postInstall
  '';

  desktopItems = [
    (makeDesktopItem {
      name = "weka";
      exec = "weka";
      icon = "weka";
      desktopName = "WEKA";
      categories = [
        "Science"
        "ArtificialIntelligence"
        "ComputerScience"
      ];
    })

    (makeDesktopItem {
      name = "weka-doc";
      exec = "weka-doc";
      icon = "weka";
      desktopName = "View the WEKA documentation with a web browser";
      categories = [
        "Science"
        "ArtificialIntelligence"
        "ComputerScience"
      ];
    })
  ];

  meta = with lib; {
    homepage = "https://www.cs.waikato.ac.nz/ml/weka/";
    description = "Collection of machine learning algorithms for data mining tasks";