about summary refs log tree commit diff
path: root/pkgs/development/compilers/pakcs
diff options
context:
space:
mode:
authorAlex Ivanov <gnidorah@users.noreply.github.com>2016-10-04 22:49:07 +0300
committerAlex Ivanov <gnidorah@users.noreply.github.com>2016-10-04 22:49:07 +0300
commitcb79662bf38aff3890d94663e6489be097bcb4cc (patch)
treea45684f8782ebd1a4023e0d781aaed662fc1ddd4 /pkgs/development/compilers/pakcs
parent98a750b4a8efd62a823e7dcd8209be879f4ae926 (diff)
pakcs: reborn
Diffstat (limited to 'pkgs/development/compilers/pakcs')
-rw-r--r--pkgs/development/compilers/pakcs/adjust-buildsystem.patch43
-rw-r--r--pkgs/development/compilers/pakcs/default.nix111
2 files changed, 154 insertions, 0 deletions
diff --git a/pkgs/development/compilers/pakcs/adjust-buildsystem.patch b/pkgs/development/compilers/pakcs/adjust-buildsystem.patch
new file mode 100644
index 0000000000000..ce0b42c9e3445
--- /dev/null
+++ b/pkgs/development/compilers/pakcs/adjust-buildsystem.patch
@@ -0,0 +1,43 @@
+diff -Naur pakcs-1.11.4-upstream/Makefile pakcs-1.11.4/Makefile
+--- pakcs-1.11.4-upstream/Makefile	2014-10-24 05:12:37.000000000 -0430
++++ pakcs-1.11.4/Makefile	2015-01-05 16:26:39.256709080 -0430
+@@ -94,7 +94,6 @@
+ install: cleanoldinfos installscripts copylibs
+ 	@echo "PAKCS installation configuration (file pakcsinitrc):"
+ 	@cat pakcsinitrc
+-	$(MAKE) frontend
+ 	# pre-compile all libraries:
+ 	@cd lib && $(MAKE) fcy
+ 	# install the Curry2Prolog compiler as a saved system:
+@@ -145,10 +144,6 @@
+ # compile the tools:
+ .PHONY: tools
+ tools:
+-	# compile the Curry Port Name Server demon:
+-	@if [ -r bin/pakcs ] ; then cd cpns       && $(MAKE) ; fi
+-	# compile the event handler demon for dynamic web pages:
+-	@if [ -r bin/pakcs ] ; then cd www        && $(MAKE) ; fi
+ 	@if [ -r bin/pakcs ] ; then cd currytools && $(MAKE) ; fi
+ 	@if [ -r bin/pakcs ] ; then cd tools      && $(MAKE) ; fi
+ 
+diff -Naur pakcs-1.11.4-upstream/scripts/pakcs.sh pakcs-1.11.4/scripts/pakcs.sh
+--- pakcs-1.11.4-upstream/scripts/pakcs.sh	2014-10-24 05:06:07.000000000 -0430
++++ pakcs-1.11.4/scripts/pakcs.sh	2015-01-05 16:26:15.697982791 -0430
+@@ -16,7 +16,7 @@
+ # use readline wrapper rlwrap if it is installed and we have tty as stdin:
+ USERLWRAP=no
+ if tty -s ; then
+-  RLWRAP=`which rlwrap`
++  RLWRAP=`type -P rlwrap`
+   if [ -x "$RLWRAP" ] ; then
+     USERLWRAP=yes
+   fi
+@@ -29,7 +29,7 @@
+ done
+ 
+ if [ $USERLWRAP = yes ] ; then
+-  exec rlwrap -c -f "$PAKCSHOME/tools/rlwrap" "$REPL" ${1+"$@"}
++  exec rlwrap -a -c -f "$PAKCSHOME/tools/rlwrap" "$REPL" ${1+"$@"}
+ else
+   exec "$REPL" ${1+"$@"}
+ fi
diff --git a/pkgs/development/compilers/pakcs/default.nix b/pkgs/development/compilers/pakcs/default.nix
new file mode 100644
index 0000000000000..739804646c2a7
--- /dev/null
+++ b/pkgs/development/compilers/pakcs/default.nix
@@ -0,0 +1,111 @@
+{ stdenv, fetchurl, cabal, swiProlog, either, mtl, syb
+, glibcLocales, makeWrapper, rlwrap, tk, which }:
+
+let
+  fname = "pakcs-1.11.4";
+
+  fsrc = fetchurl {
+    url = "http://www.informatik.uni-kiel.de/~pakcs/download/${fname}-src.tar.gz";
+    sha256 = "1xsn8h58pi1jp8wr4abyrqdps840j8limyv5i812z49npf91fy5c";
+  };
+
+in
+stdenv.mkDerivation rec {
+
+  name = fname;
+
+  curryBase = cabal.mkDerivation(self: {
+    pname = "curryBase";
+    version = "local";
+    src = fsrc;
+    sourceRoot = "${name}/frontend/curry-base";
+    isLibrary = true;
+    buildDepends = [ mtl syb ];
+  });
+
+  curryFront = cabal.mkDerivation(self: {
+    pname = "curryFront";
+    version = "local";
+    src = fsrc;
+    sourceRoot = "${name}/frontend/curry-frontend";
+    isLibrary = true;
+    isExecutable = true;
+    buildDepends = [ either mtl syb curryBase ];
+  });
+
+  src = fsrc;
+
+  buildInputs = [ swiProlog makeWrapper glibcLocales rlwrap tk which ];
+
+  patches = [ ./adjust-buildsystem.patch ];
+
+  configurePhase = ''
+    # Phony HOME.
+    mkdir phony-home
+    export HOME=$(pwd)/phony-home
+
+    # SWI Prolog
+    sed -i 's@SWIPROLOG=@SWIPROLOG='${swiProlog}/bin/swipl'@' pakcsinitrc
+  '';
+
+  buildPhase = ''
+    # Some comments in files are in UTF-8, so include the locale needed by GHC runtime.
+    export LC_ALL=en_US.UTF-8
+
+    # PAKCS must be build in place due to embedded filesystem references placed by swi.
+
+    # Prepare PAKCSHOME directory.
+    mkdir -p $out/pakcs/bin
+
+    # Set up link to cymake, which has been built already.
+    ln -s ${curryFront}/bin/cymake $out/pakcs/bin/
+
+    # Prevent embedding the derivation build directory as temp.
+    export TEMP=/tmp
+
+    # Copy to in place build location and run the build.
+    cp -r * $out/pakcs
+    (cd $out/pakcs ; make)
+  '';
+
+  installPhase = ''
+    # Install bin.
+    mkdir -p $out/bin
+    for b in $(ls $out/pakcs/bin) ; do
+      ln -s $out/pakcs/bin/$b $out/bin/ ;
+    done
+
+    # Place emacs lisp files in expected locations.
+    mkdir -p $out/share/emacs/site-lisp/curry-pakcs
+    for e in "$out/tools/emacs/"*.el ; do
+      cp $e $out/share/emacs/site-lisp/curry-pakcs/ ;
+    done
+
+    # Wrap for rlwrap and tk support.
+    wrapProgram $out/pakcs/bin/pakcs \
+      --prefix PATH ":" "${rlwrap}/bin" \
+      --prefix PATH ":" "${tk}/bin" \
+  '';
+
+  meta = {
+    homepage = "http://www.informatik.uni-kiel.de/~pakcs/";
+    description = "An implementation of the multi-paradigm declarative language Curry";
+    license = stdenv.lib.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 = [ stdenv.lib.maintainers.kkallio ];
+    platforms = stdenv.lib.platforms.linux;
+    hydraPlatforms = stdenv.lib.platforms.none;
+  };
+}