diff options
author | Alex Ivanov <gnidorah@users.noreply.github.com> | 2016-10-04 22:49:07 +0300 |
---|---|---|
committer | Alex Ivanov <gnidorah@users.noreply.github.com> | 2016-10-04 22:49:07 +0300 |
commit | cb79662bf38aff3890d94663e6489be097bcb4cc (patch) | |
tree | a45684f8782ebd1a4023e0d781aaed662fc1ddd4 /pkgs/development/compilers/pakcs | |
parent | 98a750b4a8efd62a823e7dcd8209be879f4ae926 (diff) |
pakcs: reborn
Diffstat (limited to 'pkgs/development/compilers/pakcs')
-rw-r--r-- | pkgs/development/compilers/pakcs/adjust-buildsystem.patch | 43 | ||||
-rw-r--r-- | pkgs/development/compilers/pakcs/default.nix | 111 |
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; + }; +} |