@@ -648,57 +648,94 @@ final: prev: {
648
648
# This function is like `cabalProject` but it makes the plan-nix available
649
649
# separately from the hsPkgs. The advantage is that the you can get the
650
650
# 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 ;
669
663
} ;
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
+ } ;
689
714
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 ;
702
739
703
740
# Take `hsPkgs` from the `rawProject` and update all the packages and
704
741
# components so they have a `.project` attribute and as well as
@@ -923,40 +960,74 @@ final: prev: {
923
960
cabalProject = args : let p = cabalProject' args ;
924
961
in p . hsPkgs // p ;
925
962
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
+ } ;
948
994
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 ;
960
1031
961
1032
stackProject = args : let p = stackProject' args ;
962
1033
in p . hsPkgs // p ;
0 commit comments