commit
ca931e0e1e
95
pkgs/build-support/agda/default.nix
Normal file
95
pkgs/build-support/agda/default.nix
Normal file
@ -0,0 +1,95 @@
|
|||||||
|
# Builder for Agda packages. Mostly inspired by the cabal builder.
|
||||||
|
#
|
||||||
|
# Contact: stdenv.lib.maintainers.fuuzetsu
|
||||||
|
|
||||||
|
{ stdenv, Agda, glibcLocales
|
||||||
|
, writeScriptBin
|
||||||
|
, extension ? (self: super: {})
|
||||||
|
}:
|
||||||
|
|
||||||
|
let
|
||||||
|
optionalString = stdenv.lib.optionalString;
|
||||||
|
filter = stdenv.lib.filter;
|
||||||
|
concatMapStringsSep = stdenv.lib.strings.concatMapStringsSep;
|
||||||
|
concatMapStrings = stdenv.lib.strings.concatMapStrings;
|
||||||
|
unwords = stdenv.lib.strings.concatStringsSep " ";
|
||||||
|
mapInside = xs: unwords (map (x: x + "/*") xs);
|
||||||
|
in
|
||||||
|
{ mkDerivation = args:
|
||||||
|
let
|
||||||
|
postprocess = x: x // {
|
||||||
|
sourceDirectories = filter (y: !(y == null)) x.sourceDirectories;
|
||||||
|
propagatedBuildInputs = filter (y : ! (y == null)) x.propagatedBuildInputs;
|
||||||
|
propagatedUserEnvPkgs = filter (y : ! (y == null)) x.propagatedUserEnvPkgs;
|
||||||
|
extraBuildFlags = filter (y : ! (y == null)) x.extraBuildFlags;
|
||||||
|
everythingFile = if x.everythingFile == "" then "Everything.agda" else x.everythingFile;
|
||||||
|
};
|
||||||
|
|
||||||
|
defaults = self : {
|
||||||
|
# There is no Hackage for Agda so we require src.
|
||||||
|
inherit (self) src name;
|
||||||
|
|
||||||
|
buildInputs = [ Agda ] ++ self.buildDepends;
|
||||||
|
buildDepends = [];
|
||||||
|
# Not much choice here ;)
|
||||||
|
LANG = "en_US.UTF-8";
|
||||||
|
LOCALE_ARCHIVE = optionalString stdenv.isLinux "${glibcLocales}/lib/locale/locale-archive";
|
||||||
|
|
||||||
|
everythingFile = "Everything.agda";
|
||||||
|
|
||||||
|
propagatedBuildInputs = self.buildDepends ++ self.buildTools;
|
||||||
|
propagatedUserEnvPkgs = self.buildDepends;
|
||||||
|
|
||||||
|
# Immediate source directories under which modules can be found.
|
||||||
|
sourceDirectories = [ ];
|
||||||
|
|
||||||
|
# This is used if we have a top-level element that only serves
|
||||||
|
# as the container for the source and we only care about its
|
||||||
|
# contents. The directories put here will have their
|
||||||
|
# *contents* copied over as opposed to sourceDirectories which
|
||||||
|
# would make a direct copy of the whole thing.
|
||||||
|
topSourceDirectories = [ "src" ];
|
||||||
|
|
||||||
|
buildTools = [];
|
||||||
|
|
||||||
|
# Extra stuff to pass to the Agda binary.
|
||||||
|
extraBuildFlags = [ "-i ." ];
|
||||||
|
buildFlags = let r = map (x: "-i " + x + "/share/agda") self.buildDepends;
|
||||||
|
d = map (x : "-i " + x) (self.sourceDirectories ++ self.topSourceDirectories);
|
||||||
|
in unwords (r ++ d ++ self.extraBuildFlags);
|
||||||
|
|
||||||
|
# We expose this as a mere convenience for any tools.
|
||||||
|
AGDA_PACKAGE_PATH = concatMapStrings (x: x + ":") self.buildDepends;
|
||||||
|
|
||||||
|
# Makes a wrapper available to the user. Very useful in
|
||||||
|
# nix-shell where all dependencies are -i'd.
|
||||||
|
agdaWrapper = writeScriptBin "agda" ''
|
||||||
|
${Agda}/bin/agda ${self.buildFlags} "$@"
|
||||||
|
'';
|
||||||
|
|
||||||
|
# configurePhase is idempotent
|
||||||
|
configurePhase = ''
|
||||||
|
eval "$preConfigure"
|
||||||
|
export AGDA_PACKAGE_PATH=${self.AGDA_PACKAGE_PATH};
|
||||||
|
export PATH="${self.agdaWrapper}/bin:$PATH"
|
||||||
|
eval "$postConfigure"
|
||||||
|
'';
|
||||||
|
|
||||||
|
buildPhase = ''
|
||||||
|
eval "$preBuild"
|
||||||
|
${Agda}/bin/agda ${self.buildFlags} ${self.everythingFile}
|
||||||
|
eval "$postBuild"
|
||||||
|
'';
|
||||||
|
|
||||||
|
installPhase = ''
|
||||||
|
eval "$preInstall"
|
||||||
|
mkdir -p $out/share/agda
|
||||||
|
cp -pR ${unwords self.sourceDirectories} ${mapInside self.topSourceDirectories} $out/share/agda
|
||||||
|
eval "$postInstall"
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
in stdenv.mkDerivation
|
||||||
|
(postprocess (let super = defaults self // args self;
|
||||||
|
self = super // extension self super;
|
||||||
|
in self));
|
||||||
|
}
|
@ -1,7 +1,10 @@
|
|||||||
{ cabal, fetchurl, filemanip, Agda }:
|
{ stdenv, agda, fetchurl, ghcWithPackages }:
|
||||||
|
|
||||||
cabal.mkDerivation (self: rec {
|
let
|
||||||
pname = "Agda-stdlib";
|
ghc = ghcWithPackages (s: [ s.filemanip ]);
|
||||||
|
in
|
||||||
|
agda.mkDerivation (self: rec {
|
||||||
|
name = "Agda-stdlib";
|
||||||
version = "0.8.1";
|
version = "0.8.1";
|
||||||
|
|
||||||
src = fetchurl {
|
src = fetchurl {
|
||||||
@ -9,23 +12,16 @@ cabal.mkDerivation (self: rec {
|
|||||||
sha256 = "0ij4rg4lk0pq01ing285gbmnn23dcf2rhihdcs8bbdpjg52vl4gf";
|
sha256 = "0ij4rg4lk0pq01ing285gbmnn23dcf2rhihdcs8bbdpjg52vl4gf";
|
||||||
};
|
};
|
||||||
|
|
||||||
buildDepends = [ filemanip Agda ];
|
preConfigure = ''
|
||||||
|
${ghc}/bin/runhaskell GenerateEverything.hs
|
||||||
preConfigure = "cd ffi";
|
|
||||||
|
|
||||||
postInstall = ''
|
|
||||||
mkdir -p $out/share
|
|
||||||
cd ..
|
|
||||||
${self.ghc.ghc}/bin/runhaskell GenerateEverything
|
|
||||||
${Agda}/bin/agda -i . -i src Everything.agda
|
|
||||||
cp -pR src $out/share/agda
|
|
||||||
'';
|
'';
|
||||||
|
|
||||||
|
topSourceDirectories = [ "src" ];
|
||||||
|
|
||||||
meta = {
|
meta = {
|
||||||
homepage = "http://wiki.portal.chalmers.se/agda/pmwiki.php?n=Libraries.StandardLibrary";
|
homepage = "http://wiki.portal.chalmers.se/agda/pmwiki.php?n=Libraries.StandardLibrary";
|
||||||
description = "A standard library for use with the Agda compiler.";
|
description = "A standard library for use with the Agda compiler.";
|
||||||
license = "unknown";
|
license = "unknown";
|
||||||
platforms = self.ghc.meta.platforms;
|
maintainers = with stdenv.lib.maintaianers; [ jwiegley ];
|
||||||
maintainers = [ self.stdenv.lib.maintainers.jwiegley ];
|
|
||||||
};
|
};
|
||||||
})
|
})
|
@ -6586,6 +6586,18 @@ let
|
|||||||
|
|
||||||
zziplib = callPackage ../development/libraries/zziplib { };
|
zziplib = callPackage ../development/libraries/zziplib { };
|
||||||
|
|
||||||
|
### DEVELOPMENT / LIBRARIES / AGDA
|
||||||
|
|
||||||
|
agda = callPackage ../build-support/agda {
|
||||||
|
glibcLocales = if pkgs.stdenv.isLinux then pkgs.glibcLocales else null;
|
||||||
|
extension = self : super : {};
|
||||||
|
Agda = haskellPackages.Agda;
|
||||||
|
inherit writeScriptBin;
|
||||||
|
};
|
||||||
|
|
||||||
|
AgdaStdlib = callPackage ../development/compilers/agda/stdlib.nix {
|
||||||
|
ghcWithPackages = haskellPackages.ghcWithPackages;
|
||||||
|
};
|
||||||
|
|
||||||
### DEVELOPMENT / LIBRARIES / JAVA
|
### DEVELOPMENT / LIBRARIES / JAVA
|
||||||
|
|
||||||
|
@ -2892,7 +2892,6 @@ self : let callPackage = x : y : modifyPrio (newScope self x y); in
|
|||||||
# Compilers.
|
# Compilers.
|
||||||
|
|
||||||
Agda = callPackage ../development/compilers/agda {};
|
Agda = callPackage ../development/compilers/agda {};
|
||||||
AgdaStdlib = callPackage ../development/compilers/agda/stdlib.nix {};
|
|
||||||
|
|
||||||
uhc = callPackage ../development/compilers/uhc {};
|
uhc = callPackage ../development/compilers/uhc {};
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user