Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit 43de0d0

Browse filesBrowse files
committed
Inline evalProjectModule into cabalProject' and stackProject'
1 parent bc3f8b6 commit 43de0d0
Copy full SHA for 43de0d0

File tree

Expand file treeCollapse file tree

1 file changed

+153
-82
lines changed
Filter options
Expand file treeCollapse file tree

1 file changed

+153
-82
lines changed

‎overlays/haskell.nix

Copy file name to clipboardExpand all lines: overlays/haskell.nix
+153-82Lines changed: 153 additions & 82 deletions
Original file line numberDiff line numberDiff line change
@@ -648,57 +648,94 @@ final: prev: {
648648
# This function is like `cabalProject` but it makes the plan-nix available
649649
# separately from the hsPkgs. The advantage is that the you can get the
650650
# plan-nix without building the project.
651-
cabalProject' =
652-
projectModule: haskellLib.evalProjectModule ../modules/cabal-project.nix projectModule (
653-
{ src, compiler-nix-name, compilerSelection, evalPackages, ... }@args:
654-
let
655-
callProjectResults = callCabalProjectToNix args;
656-
plan-pkgs = importAndFilterProject {
657-
inherit (callProjectResults) projectNix sourceRepos src;
658-
};
659-
buildProject = if final.stdenv.hostPlatform != final.stdenv.buildPlatform
660-
then final.buildPackages.haskell-nix.cabalProject' projectModule
661-
else project;
662-
pkg-set = if plan-pkgs ? configurationError
663-
then {
664-
inherit (plan-pkgs) configurationError;
665-
config = {
666-
compiler.nix-name = compiler-nix-name;
667-
hsPkgs = {};
668-
inherit evalPackages;
651+
cabalProject' = projectModule:
652+
(final.lib.evalModules {
653+
modules =
654+
(if builtins.isList projectModule then projectModule else [ projectModule ]) ++
655+
[ (import ../modules/project-common.nix)
656+
(import ../modules/cabal-project.nix)
657+
# Pass the pkgs and the buildProject to the modules
658+
({ config, lib, ... }: {
659+
_module.args = {
660+
pkgs = final;
661+
# to make it easy to depends on build packages in, eg., shell definition:
662+
inherit (config.project) buildProject;
669663
};
670-
}
671-
else mkCabalProjectPkgSet
672-
{ inherit compiler-nix-name compilerSelection plan-pkgs;
673-
pkg-def-extras = args.pkg-def-extras or [];
674-
modules = [ { _module.args.buildModules = final.lib.mkForce buildProject.pkg-set; } ]
675-
++ (args.modules or [])
676-
++ [ {
677-
ghc.package =
678-
if args.ghcOverride != null
679-
then args.ghcOverride
680-
else if args.ghc != null
681-
then args.ghc
682-
else
683-
final.lib.mkDefault (args.compilerSelection final.buildPackages).${compiler-nix-name};
684-
compiler.nix-name = final.lib.mkForce args.compiler-nix-name;
685-
evalPackages = final.lib.mkDefault evalPackages;
686-
} ];
687-
extra-hackages = args.extra-hackages or [] ++ callProjectResults.extra-hackages;
688-
};
664+
inherit (config.project) hsPkgs;
665+
})
666+
#
667+
({ config, lib, pkgs, ... }:
668+
let
669+
callProjectResults = callCabalProjectToNix config;
670+
671+
plan-pkgs = importAndFilterProject {
672+
inherit (callProjectResults) projectNix sourceRepos src;
673+
};
674+
675+
buildProject = if pkgs.stdenv.hostPlatform != pkgs.stdenv.buildPlatform
676+
then pkgs.buildPackages.haskell-nix.cabalProject' projectModule
677+
else project;
678+
679+
pkg-set =
680+
if plan-pkgs ? configurationError then
681+
{
682+
inherit (plan-pkgs) configurationError;
683+
config = {
684+
compiler.nix-name = config.compiler-nix-name;
685+
hsPkgs = {};
686+
inherit (config) evalPackages;
687+
};
688+
}
689+
else
690+
mkCabalProjectPkgSet {
691+
pkg-def-extras = config.pkg-def-extras or [];
692+
693+
inherit (config) compiler-nix-name compilerSelection;
694+
inherit plan-pkgs;
695+
696+
modules =
697+
[ { _module.args.buildModules = lib.mkForce buildProject.pkg-set; } ] ++
698+
config.modules or [] ++
699+
[ {
700+
ghc.package =
701+
if config.ghcOverride != null
702+
then config.ghcOverride
703+
else if config.ghc != null
704+
then config.ghc
705+
else
706+
lib.mkDefault (config.compilerSelection pkgs.buildPackages).${config.compiler-nix-name};
707+
708+
compiler.nix-name = lib.mkForce config.compiler-nix-name;
709+
} ] ++
710+
[ { evalPackages = lib.mkDefault config.evalPackages; } ];
711+
712+
extra-hackages = config.extra-hackages or [] ++ callProjectResults.extra-hackages;
713+
};
689714

690-
project = addProjectAndPackageAttrs rec {
691-
inherit (pkg-set.config) hsPkgs;
692-
inherit pkg-set;
693-
plan-nix = callProjectResults.projectNix;
694-
inherit (callProjectResults) index-state-max;
695-
tool = final.buildPackages.haskell-nix.tool' evalPackages pkg-set.config.compiler.nix-name;
696-
tools = final.buildPackages.haskell-nix.tools' evalPackages pkg-set.config.compiler.nix-name;
697-
roots = final.haskell-nix.roots pkg-set.config.compiler.nix-name;
698-
projectFunction = haskell-nix: haskell-nix.cabalProject';
699-
inherit projectModule buildProject args;
700-
};
701-
in project);
715+
project = addProjectAndPackageAttrs {
716+
args = config;
717+
projectFunction = haskell-nix: haskell-nix.cabalProject';
718+
719+
inherit pkg-set;
720+
inherit (pkg-set.config) hsPkgs;
721+
722+
inherit projectModule buildProject;
723+
724+
tool = pkgs.buildPackages.haskell-nix.tool' config.evalPackages pkg-set.config.compiler.nix-name;
725+
tools = pkgs.buildPackages.haskell-nix.tools' config.evalPackages pkg-set.config.compiler.nix-name;
726+
roots = pkgs.haskell-nix.roots pkg-set.config.compiler.nix-name;
727+
728+
# specific to cabalProject
729+
plan-nix = callProjectResults.projectNix;
730+
inherit (callProjectResults) index-state-max;
731+
};
732+
in {
733+
options.project = lib.mkOption { type = lib.types.unspecified; };
734+
config.project = project;
735+
}
736+
)
737+
];
738+
}).config.project;
702739

703740
# Take `hsPkgs` from the `rawProject` and update all the packages and
704741
# components so they have a `.project` attribute and as well as
@@ -923,40 +960,74 @@ final: prev: {
923960
cabalProject = args: let p = cabalProject' args;
924961
in p.hsPkgs // p;
925962

926-
stackProject' =
927-
projectModule: haskellLib.evalProjectModule ../modules/stack-project.nix projectModule (
928-
{ src, evalPackages, ... }@args:
929-
let callProjectResults = callStackToNix (args
930-
// final.lib.optionalAttrs (args.cache == null) { inherit cache; });
931-
generatedCache = genStackCache args;
932-
cache = if args.cache != null then args.cache else generatedCache;
933-
in let
934-
buildProject = if final.stdenv.hostPlatform != final.stdenv.buildPlatform
935-
then final.buildPackages.haskell-nix.stackProject' projectModule
936-
else project;
937-
pkg-set = mkStackPkgSet
938-
{ stack-pkgs = importAndFilterProject callProjectResults;
939-
pkg-def-extras = (args.pkg-def-extras or []);
940-
modules = [ { _module.args.buildModules = final.lib.mkForce buildProject.pkg-set; }
941-
(mkCacheModule cache) ]
942-
++ (args.modules or [])
943-
++ final.lib.optional (args.ghc != null) { ghc.package = args.ghc; }
944-
++ final.lib.optional (args.compiler-nix-name != null)
945-
{ compiler.nix-name = final.lib.mkForce args.compiler-nix-name; }
946-
++ [ { evalPackages = final.lib.mkDefault evalPackages; } ];
947-
};
963+
stackProject' = projectModule:
964+
(final.lib.evalModules {
965+
modules =
966+
(if builtins.isList m then m else [m]) ++
967+
[ (import ../modules/project-common.nix)
968+
(import ../modules/stack-project.nix)
969+
# Pass the pkgs and the buildProject to the modules
970+
({ config, lib, ... }: {
971+
_module.args = {
972+
pkgs = final;
973+
# to make it easy to depends on build packages in, eg., shell definition:
974+
inherit (config.project) buildProject;
975+
};
976+
inherit (config.project) hsPkgs;
977+
})
978+
#
979+
({ config, lib, ... }:
980+
let
981+
callProjectResults = callStackToNix (config // lib.optionalAttrs (config.cache == null) { inherit cache; });
982+
generatedCache = genStackCache config;
983+
cache = if config.cache != null then config.cache else generatedCache;
984+
985+
in let
986+
buildProject = if pkgs.stdenv.hostPlatform != pkgs.stdenv.buildPlatform
987+
then pkgs.buildPackages.haskell-nix.stackProject' projectModule
988+
else project;
989+
990+
pkg-set = mkStackPkgSet {
991+
stack-pkgs = importAndFilterProject {
992+
inherit (callProjectResults) projectNix sourceRepos src;
993+
};
948994

949-
project = addProjectAndPackageAttrs {
950-
inherit (pkg-set.config) hsPkgs;
951-
inherit pkg-set;
952-
stack-nix = callProjectResults.projectNix;
953-
tool = final.buildPackages.haskell-nix.tool' evalPackages pkg-set.config.compiler.nix-name;
954-
tools = final.buildPackages.haskell-nix.tools' evalPackages pkg-set.config.compiler.nix-name;
955-
roots = final.haskell-nix.roots pkg-set.config.compiler.nix-name;
956-
projectFunction = haskell-nix: haskell-nix.stackProject';
957-
inherit projectModule buildProject args;
958-
};
959-
in project);
995+
pkg-def-extras = config.pkg-def-extras or [];
996+
997+
modules =
998+
[ { _module.args.buildModules = lib.mkForce buildProject.pkg-set; }
999+
(mkCacheModule cache)
1000+
] ++
1001+
config.modules or [] ++
1002+
lib.optional (config.ghc != null)
1003+
{ ghc.package = config.ghc; } ++
1004+
lib.optional (config.compiler-nix-name != null)
1005+
{ compiler.nix-name = lib.mkForce config.compiler-nix-name; } ++
1006+
[ { evalPackages = lib.mkDefault evalPackages; } ];
1007+
};
1008+
1009+
project = addProjectAndPackageAttrs {
1010+
args = config;
1011+
projectFunction = haskell-nix: haskell-nix.stackProject';
1012+
1013+
inherit pkg-set;
1014+
inherit (pkg-set.config) hsPkgs;
1015+
1016+
inherit projectModule buildProject;
1017+
1018+
tool = pkgs.buildPackages.haskell-nix.tool' config.evalPackages pkg-set.config.compiler.nix-name;
1019+
tools = pkgs.buildPackages.haskell-nix.tools' config.evalPackages pkg-set.config.compiler.nix-name;
1020+
roots = pkgs.haskell-nix.roots pkg-set.config.compiler.nix-name;
1021+
1022+
stack-nix = callProjectResults.projectNix;
1023+
};
1024+
in {
1025+
options.project = lib.mkOptions { type = lib.types.unspecified; };
1026+
config.project = project;
1027+
}
1028+
)
1029+
];
1030+
}).config.project;
9601031

9611032
stackProject = args: let p = stackProject' args;
9621033
in p.hsPkgs // p;

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.