nixpkgs/pkgs/development/compilers/pakcs/default.nix

100 lines
3.4 KiB
Nix
Raw Normal View History

2018-07-22 16:07:29 +01:00
{ stdenv, fetchurl, makeWrapper
, haskellPackages, haskell
, which, swiProlog, rlwrap, tk
, curl, git, unzip, gnutar, coreutils, sqlite }:
2016-10-04 20:49:07 +01:00
let
2019-11-04 07:31:51 +00:00
name = "pakcs-2.2.0";
2016-10-04 20:49:07 +01:00
2018-11-17 02:08:21 +00:00
# Don't switch to development release without a reason, because its
# source updates without version bump. Prefer current release instead.
2018-07-22 16:07:29 +01:00
src = fetchurl {
url = "https://www.informatik.uni-kiel.de/~pakcs/download/${name}-src.tar.gz";
2019-11-04 07:31:51 +00:00
sha256 = "0c0a6cp9lwha5i90kv9ya2zi1ggnvkf4gwjfzbffgwwa77s2wz2l";
2016-10-04 20:49:07 +01:00
};
2018-07-22 16:07:29 +01:00
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";
});
2016-10-05 19:20:58 +01:00
};
2018-07-22 16:07:29 +01:00
}).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"
2016-10-10 19:50:05 +01:00
];
2016-10-04 20:49:07 +01:00
2018-07-22 16:07:29 +01:00
preConfigure = ''
# Since we can't expand $out in `makeFlags`
#makeFlags="$makeFlags PAKCSINSTALLDIR=$out/pakcs"
2016-10-04 20:49:07 +01:00
for file in currytools/cpm/src/CPM/Repository.curry \
currytools/cpm/src/CPM/Repository/CacheDB.curry \
scripts/compile-all-libs.sh \
scripts/cleancurry.sh \
examples/test.sh testsuite/test.sh lib/test.sh; do
substituteInPlace $file --replace "/bin/rm" "rm"
done
'' ;
2016-10-04 20:49:07 +01:00
2018-07-22 16:07:29 +01:00
# 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
2016-10-04 20:49:07 +01:00
buildPhase = ''
2018-07-22 16:07:29 +01:00
mkdir -p $out/pakcs
2016-10-04 20:49:07 +01:00
cp -r * $out/pakcs
2018-07-22 16:07:29 +01:00
(cd $out/pakcs ; make -j$NIX_BUILD_CORES $makeFlags)
2016-10-04 20:49:07 +01:00
'';
installPhase = ''
2018-07-22 16:07:29 +01:00
ln -s $out/pakcs/bin $out
2016-10-04 20:49:07 +01:00
2018-07-22 16:07:29 +01:00
mkdir -p $out/share/emacs/site-lisp
ln -s $out/pakcs/tools/emacs $out/share/emacs/site-lisp/curry-pakcs
2016-10-04 20:49:07 +01:00
wrapProgram $out/pakcs/bin/pakcs \
--prefix PATH ":" "${rlwrap}/bin" \
2018-07-22 16:07:29 +01:00
--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 ]}"
2016-10-04 20:49:07 +01:00
'';
2016-10-15 03:24:42 +01:00
meta = with stdenv.lib; {
homepage = "http://www.informatik.uni-kiel.de/~pakcs/";
2016-10-04 20:49:07 +01:00
description = "An implementation of the multi-paradigm declarative language Curry";
2016-10-15 03:24:42 +01:00
license = licenses.bsd3;
2016-10-04 20:49:07 +01:00
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).
'';
2016-10-15 03:24:42 +01:00
maintainers = with maintainers; [ kkallio gnidorah ];
2018-07-22 16:07:29 +01:00
platforms = platforms.linux;
2016-10-04 20:49:07 +01:00
};
}