about summary refs log tree commit diff
path: root/nixpkgs/pkgs/development/compilers/pakcs/default.nix
diff options
context:
space:
mode:
Diffstat (limited to 'nixpkgs/pkgs/development/compilers/pakcs/default.nix')
-rw-r--r--nixpkgs/pkgs/development/compilers/pakcs/default.nix94
1 files changed, 94 insertions, 0 deletions
diff --git a/nixpkgs/pkgs/development/compilers/pakcs/default.nix b/nixpkgs/pkgs/development/compilers/pakcs/default.nix
new file mode 100644
index 000000000000..a118e7ab73ba
--- /dev/null
+++ b/nixpkgs/pkgs/development/compilers/pakcs/default.nix
@@ -0,0 +1,94 @@
+{ stdenv, fetchurl, makeWrapper
+, haskellPackages, haskell
+, which, swiProlog, rlwrap, tk
+, curl, git, unzip, gnutar, coreutils, sqlite }:
+
+let
+  name = "pakcs-2.1.1";
+
+  # Don't switch to development release without a reason, because its
+  # source updates without version bump. Prefer current release instead.
+  src = fetchurl {
+    url = "https://www.informatik.uni-kiel.de/~pakcs/download/${name}-src.tar.gz";
+    sha256 = "112v9ynqfbbm4x770mcfrai9v5bh7c3zn7jka80pv6v4y65r778c";
+  };
+
+  curry-frontend = (haskellPackages.override {
+    overrides = self: super: {
+      curry-base = haskell.lib.overrideCabal (super.callPackage ./curry-base.nix {}) (drv: {
+        inherit src;
+        postUnpack = "sourceRoot+=/frontend/curry-base";
+      });
+      curry-frontend = haskell.lib.overrideCabal (super.callPackage ./curry-frontend.nix {}) (drv: {
+        inherit src;
+        postUnpack = "sourceRoot+=/frontend/curry-frontend";
+      });
+    };
+  }).curry-frontend;
+in stdenv.mkDerivation {
+  inherit name src;
+
+  buildInputs = [ swiProlog ];
+  nativeBuildInputs = [ which makeWrapper ];
+
+  makeFlags = [
+    "CURRYFRONTEND=${curry-frontend}/bin/curry-frontend"
+    "DISTPKGINSTALL=yes"
+    # Not needed, just to make script pass
+    "CURRYTOOLSDIR=0"
+    "CURRYLIBSDIR=0"
+  ];
+
+  preConfigure = ''
+    # Since we can't expand $out in `makeFlags`
+    #makeFlags="$makeFlags PAKCSINSTALLDIR=$out/pakcs"
+
+    substituteInPlace currytools/cpm/src/CPM/Repository.curry \
+      --replace "/bin/rm" "rm"
+  '';
+
+  # cypm new: EXISTENCE ERROR: source_sink
+  # "/tmp/nix-build-pakcs-2.0.2.drv-0/pakcs-2.0.2/currytools/cpm/templates/LICENSE"
+  # does not exist
+  buildPhase = ''
+    mkdir -p $out/pakcs
+    cp -r * $out/pakcs
+    (cd $out/pakcs ; make -j$NIX_BUILD_CORES $makeFlags)
+  '';
+
+  installPhase = ''
+    ln -s $out/pakcs/bin $out
+
+    mkdir -p $out/share/emacs/site-lisp
+    ln -s $out/pakcs/tools/emacs $out/share/emacs/site-lisp/curry-pakcs
+
+    wrapProgram $out/pakcs/bin/pakcs \
+      --prefix PATH ":" "${rlwrap}/bin" \
+      --prefix PATH ":" "${tk}/bin"
+
+    # List of dependencies from currytools/cpm/src/CPM/Main.curry
+    wrapProgram $out/pakcs/bin/cypm \
+      --prefix PATH ":" "${stdenv.lib.makeBinPath [ curl git unzip gnutar coreutils sqlite ]}"
+  '';
+
+  meta = with stdenv.lib; {
+    homepage = http://www.informatik.uni-kiel.de/~pakcs/;
+    description = "An implementation of the multi-paradigm declarative language Curry";
+    license = licenses.bsd3;
+
+    longDescription = ''
+      PAKCS is an implementation of the multi-paradigm declarative language
+      Curry jointly developed by the Portland State University, the Aachen
+      University of Technology, and the University of Kiel. Although this is
+      not a highly optimized implementation but based on a high-level
+      compilation of Curry programs into Prolog programs, it is not a toy
+      implementation but has been used for a variety of applications (e.g.,
+      graphical programming environments, an object-oriented front-end for
+      Curry, partial evaluators, database applications, HTML programming
+      with dynamic web pages, prototyping embedded systems).
+    '';
+
+    maintainers = with maintainers; [ kkallio gnidorah ];
+    platforms = platforms.linux;
+  };
+}