streamly/default.nix

151 lines
5.8 KiB
Nix
Raw Normal View History

2020-10-12 01:24:21 +03:00
# CAUTION! a spelling mistake in arg string is ignored silently.
#
# To use ghc-8.6.5
# nix-shell --argstr compiler "ghc865"
{
nixpkgs ?
2022-08-17 21:16:50 +03:00
import (builtins.fetchTarball
https://github.com/NixOS/nixpkgs/archive/refs/tags/22.05.tar.gz)
{}
2020-10-12 01:24:21 +03:00
, compiler ? "default"
, c2nix ? "" # cabal2nix CLI options
# TODO
#, sources ? [] # e.g. [./. ./benchmark]
#, hdeps ? [] # e.g. [time, mtl]
#, deps ? [] # e.g. [SDL2]
}:
let haskellPackages =
if compiler == "default"
then nixpkgs.haskellPackages
else nixpkgs.haskell.packages.${compiler};
# we can possibly avoid adding our package to HaskellPackages like
# in the case of nix-shell for a single package?
mkPackage = super: pkg: path: opts: inShell:
let orig = super.callCabal2nixWithOptions pkg path opts {};
in if inShell
# Avoid copying the source directory to nix store by using
# src = null.
then orig.overrideAttrs (oldAttrs: { src = null; })
else orig;
2021-02-23 18:30:08 +03:00
flags = "--benchmark --flag fusion-plugin --flag doctests" + " " + c2nix;
2020-10-12 01:24:21 +03:00
mkHaskellPackages = inShell:
haskellPackages.override {
# We could disbale doCheck on all like this, but it would make the
# whole world rebuild, we can't use the binary cache
#packageSetConfig = self: super: {
# mkDerivation = drv: super.mkDerivation (drv // {
# doCheck = false;
# });
#};
overrides = self: super:
with nixpkgs.haskell.lib;
{
streamly = mkPackage super "streamly" ./. flags inShell;
2022-03-07 13:00:48 +03:00
streamly-core =
mkPackage super "streamly-core" ./core flags inShell;
2020-10-12 01:24:21 +03:00
streamly-benchmarks =
mkPackage super "streamly-benchmarks"
./benchmark flags inShell;
streamly-tests =
mkPackage super "streamly-tests"
./test flags inShell;
streamly-docs =
mkPackage super "streamly-docs"
./docs flags inShell;
2020-10-12 01:24:21 +03:00
2022-01-01 13:12:24 +03:00
#fusion-plugin =
# super.callHackageDirect
# { pkg = "fusion-plugin";
# ver = "0.2.3";
# sha256 = "073wbhdxj1sh5160blaihbzkkhabs8s71pqhag16lvmgbb7a3hla";
# } {};
lockfree-queue =
super.callHackageDirect
{ pkg = "lockfree-queue";
ver = "0.2.4";
sha256 = "1bj9agy3x0yjbscpjgn96gpnj4lvkh39spjvy3jnrr3a42v3ynw7";
} {};
2021-01-29 17:56:46 +03:00
2022-08-17 21:16:50 +03:00
#unicode-data =
# super.callHackageDirect
# { pkg = "unicode-data";
# ver = "0.2.0";
# sha256 = "14crb68g79yyw87fgh49z2fn4glqx0zr53v6mapihaxzkikhkkc3";
# } {};
2021-08-04 12:22:54 +03:00
2022-08-17 21:16:50 +03:00
#tasty-bench = super.tasty-bench_0_3_1;
2022-01-01 13:12:24 +03:00
#tasty-bench =
# super.callHackageDirect
# { pkg = "tasty-bench";
# ver = "0.3.1";
# sha256 = "0ixdxa7qwl4kck12gwvxg9kydhckjsi5drxcypr33jcdj771j7a4";
# } {};
2021-06-03 15:45:48 +03:00
#tasty =
# super.callHackageDirect
# { pkg = "tasty";
# ver = "1.4.1";
# sha256 = "0g1280gcpcvjbmyk83jv3y9gs2z7fvmcagi9rfs8c9x036nvjq6c";
# } {};
2021-06-03 15:45:48 +03:00
2020-10-12 01:24:21 +03:00
# Example to Use a different version of a package
#QuickCheck = self.QuickCheck_2_14;
# Example to disable tests if tests fail or take too long
# or to use different configure flags if needed
#
# XXX We need the ability to disable doCheck on all
# those packages that are being built locally and
# not fetched from the cache. Running tests could do
# nasty things to the machine e.g. some tests even
# listen for incoming connections on the network.
#selective =
# super.selective.overrideAttrs (oldAttrs:
# { doCheck = false;
# configureFlags =
# oldAttrs.configureFlags ++ ["--disable-tests"];
# });
};
};
drv = mkHaskellPackages true;
shell = drv.shellFor {
packages = p:
[ p.streamly
2022-03-07 13:00:48 +03:00
p.streamly-core
2020-10-12 01:24:21 +03:00
p.streamly-benchmarks
p.streamly-tests
p.streamly-docs
2020-10-12 01:24:21 +03:00
];
# some dependencies of hoogle fail to build with quickcheck-2.14
# We should use hoogle as external tool instead of building it here
# withHoogle = true;
doBenchmark = true;
# XXX On macOS cabal2nix does not seem to generate a dependency on
# Cocoa framework.
buildInputs =
if builtins.currentSystem == "x86_64-darwin"
then [nixpkgs.darwin.apple_sdk.frameworks.Cocoa]
else [];
2020-10-12 01:24:21 +03:00
# Use a better prompt
shellHook = ''
2021-06-12 23:11:54 +03:00
export CABAL_DIR="$(pwd)/.cabal.nix"
#This is commented for hls to work with VSCode
#cabal user-config update -a "jobs: 1"
2020-10-12 01:24:21 +03:00
if test -n "$PS_SHELL"
then
export PS1="$PS_SHELL\[$bldred\](nix:streamly)\[$txtrst\] "
2020-10-12 01:24:21 +03:00
fi
'';
};
in if nixpkgs.lib.inNixShell
then shell
else (mkHaskellPackages false).streamly