summary refs log tree commit diff
path: root/pkgs/development/interpreters/j/default.nix
diff options
context:
space:
mode:
Diffstat (limited to 'pkgs/development/interpreters/j/default.nix')
-rw-r--r--pkgs/development/interpreters/j/default.nix105
1 files changed, 65 insertions, 40 deletions
diff --git a/pkgs/development/interpreters/j/default.nix b/pkgs/development/interpreters/j/default.nix
index e41d71ef960..7f35dcfc635 100644
--- a/pkgs/development/interpreters/j/default.nix
+++ b/pkgs/development/interpreters/j/default.nix
@@ -1,82 +1,107 @@
-{ lib, stdenv, fetchFromGitHub, readline, libedit, bc
+{ lib
+, stdenv
+, fetchFromGitHub
+, bc
+, libedit
+, readline
 , avxSupport ? stdenv.hostPlatform.avxSupport
 }:
 
 stdenv.mkDerivation rec {
   pname = "j";
-  version = "902";
-  jtype = "release-b";
+  version = "904-beta-c";
+
   src = fetchFromGitHub {
+    name = "${pname}-source";
     owner = "jsoftware";
     repo = "jsource";
-    rev = "j${version}-${jtype}";
-    sha256 = "0j67vgikqflwjqacsdicasvyv1k54s2c8vjgwmf0ix7l41p4xqz0";
-    name = "jsource";
+    rev = "j${version}";
+    hash = "sha256-MzEO/saHEBl1JwVlFC6P2UKm9RZnV7KVrNd9h4cPV/w=";
   };
 
-  buildInputs = [ readline libedit bc ];
-  bits = if stdenv.is64bit then "64" else "32";
-  platform =
-    if (stdenv.isAarch32 || stdenv.isAarch64) then "raspberry" else
-    if stdenv.isLinux then "linux" else
-    if stdenv.isDarwin then "darwin" else
-    "unknown";
-  variant = if stdenv.isx86_64 && avxSupport then "avx" else "";
-
-  j64x="j${bits}${variant}";
-
-  doCheck = true;
-
-  # Causes build failure due to warning
-  hardeningDisable = lib.optional stdenv.cc.isClang "strictoverflow";
-
-  # Causes build failure due to warning
-  # https://github.com/jsoftware/jsource/issues/16
-  NIX_CFLAGS_COMPILE = "-Wno-error=return-local-addr";
+  buildInputs = [
+    readline
+    libedit
+    bc
+  ];
+
+  dontConfigure = true;
+
+  # emulating build_all.sh configuration variables
+  jplatform =
+    if stdenv.isDarwin then "darwin"
+    else if (stdenv.isAarch32 || stdenv.isAarch64) then "raspberry"
+    else if stdenv.isLinux then "linux"
+    else "unsupported";
+
+  j64x =
+    if stdenv.is32bit then "j32"
+    else if stdenv.isx86_64 then
+      if (stdenv.isLinux && avxSupport) then "j64avx" else "j64"
+    else if stdenv.isAarch64 then
+      if stdenv.isDarwin then "j64arm" else "j64"
+    else "unsupported";
 
   buildPhase = ''
-    export SOURCE_DIR=$(pwd)
-    export HOME=$TMPDIR
-    export JLIB=$SOURCE_DIR/jlibrary
+    runHook preBuild
 
-    echo $OUT_DIR
+    export SRCDIR=$(pwd)
+    export HOME=$TMPDIR
+    export JLIB=$SRCDIR/jlibrary
+    export CC=cc
 
     cd make2
 
     patchShebangs .
-    sed -i $JLIB/bin/profile.ijs -e "s@'/usr/share/j/.*'@'$out/share/j'@;"
 
-    j64x="${j64x}" ./build_all.sh
+    j64x="${j64x}" jplatform="${jplatform}" ./build_all.sh
 
-    cp $SOURCE_DIR/bin/${platform}/j${bits}*/* "$JLIB/bin"
+    cp -v $SRCDIR/bin/${jplatform}/${j64x}/* "$JLIB/bin"
+
+    runHook postBuild
   '';
 
+  doCheck = true;
+
   checkPhase = ''
+    runHook preCheck
 
-    echo 'i. 5' | $JLIB/bin/jconsole | fgrep "0 1 2 3 4"
+    echo "Smoke test"
+    echo 'i. 10' | $JLIB/bin/jconsole | fgrep "0 1 2 3 4 5 6 7 8 9"
 
     # Now run the real tests
-    cd $SOURCE_DIR/test
+    pushd $SRCDIR/test
     for f in *.ijs
     do
-      echo $f
+      echo -n "test $f: "
       $JLIB/bin/jconsole < $f > /dev/null || echo FAIL && echo PASS
     done
+    popd
+
+    runHook postCheck
   '';
 
   installPhase = ''
-    mkdir -p "$out"
+    runHook preInstall
 
-    mkdir -p "$out/share/j"
+    mkdir -p "$out/share/j/"
     cp -r $JLIB/{addons,system} "$out/share/j"
     cp -r $JLIB/bin "$out"
+
+    runHook postInstall
   '';
 
   meta = with lib; {
+    homepage = "http://jsoftware.com/";
     description = "J programming language, an ASCII-based APL successor";
-    maintainers = with maintainers; [ raskin synthetica ];
-    platforms = with platforms; linux ++ darwin;
+    longDescription = ''
+      J is a high-level, general-purpose programming language that is
+      particularly suited to the mathematical, statistical, and logical analysis
+      of data. It is a powerful tool for developing algorithms and exploring
+      problems that are not already well understood.
+    '';
     license = licenses.gpl3Plus;
-    homepage = "http://jsoftware.com/";
+    maintainers = with maintainers; [ raskin synthetica AndersonTorres ];
+    platforms = with platforms; unix;
   };
 }