{ stdenv, fetchurl, cabal, swiProlog, either, mtl, syb , glibcLocales, makeWrapper, rlwrap, tk }: let fname = "pakcs-1.11.3"; fsrc = fetchurl { url = "http://www.informatik.uni-kiel.de/~pakcs/download/${fname}-src.tar.gz"; sha256 = "006bq6cmycq2f4xb3zmnmxyngj64hppk3a083hy0qzj7gl77zvfw"; }; 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 ]; 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 ''; preBuild = '' # Some comments in files are in UTF-8, so include the locale needed by GHC runtime. export LOCALE_ARCHIVE=${glibcLocales}/lib/locale/locale-archive export LC_ALL=en_US.UTF-8 # Set up link to cymake, which has been built already. ensureDir bin/.local ln -s ${curryFront}/bin/cymake bin/.local/ ''; installPhase = '' # Prepare PAKCSHOME directory. ensureDir $out/pakcs for d in bin curry2prolog currytools lib tools cpns include www examples docs ; do cp -r $d $out/pakcs ; done cp pakcsrc.default $out/pakcs cp pakcsinitrc $out/pakcs # Fixing PAKCSHOME and related paths. sed -i 's@PAKCSHOME=/tmp/.*@PAKCSHOME='$out/pakcs'@' $out/pakcs/bin/{pakcs,makecurrycgi,parsecurry,.makesavedstate} # The Prolog sources must be rebuilt in their final directory, # to switch the embedded references to the tmp build directory. export TEMP=/tmp (cd $out/pakcs/curry2prolog/ ; rm c2p.state ; make) cp Makefile $out/pakcs (cd $out/pakcs ; make tools) (cd $out/pakcs/cpns ; make) (cd $out/pakcs/www ; make) # Install bin. ensureDir $out/bin for b in makecurrycgi .makesavedstate pakcs parsecurry cleancurry \ addtypes cass currybrowse currycreatemake currydoc currytest \ dataToXml erd2curry ; do ln -s $out/pakcs/bin/$b $out/bin/ ; done # Place emacs lisp files in expected locations. ensureDir $out/share/emacs/site-lisp/curry-pakcs for e in "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; }; }