@@ -64,6 +64,8 @@ module Distribution.Client.Dependency
64
64
, addDefaultSetupDependencies
65
65
, addSetupCabalMinVersionConstraint
66
66
, addSetupCabalMaxVersionConstraint
67
+ , setImplicitSetupInfo
68
+ , extendSetupInfoDeps
67
69
) where
68
70
69
71
import Distribution.Client.Compat.Prelude
@@ -591,49 +593,69 @@ removeBound RelaxUpper RelaxDepModNone = removeUpperBound
591
593
removeBound RelaxLower RelaxDepModCaret = transformCaretLower
592
594
removeBound RelaxUpper RelaxDepModCaret = transformCaretUpper
593
595
594
- -- | Supply defaults for packages without explicit Setup dependencies
596
+ -- | Supply defaults for packages without explicit Setup dependencies.
597
+ -- It also serves to add the implicit dependency on @hooks-exe@ needed to
598
+ -- compile the @Setup.hs@ executable produced from 'SetupHooks' when
599
+ -- @build-type: Hooks@. The first argument function determines which implicit
600
+ -- dependencies are needed (including the one on @hooks-exe@).
595
601
--
596
602
-- Note: It's important to apply 'addDefaultSetupDepends' after
597
603
-- 'addSourcePackages'. Otherwise, the packages inserted by
598
604
-- 'addSourcePackages' won't have upper bounds in dependencies relaxed.
599
605
addDefaultSetupDependencies
600
- :: (UnresolvedSourcePackage -> Maybe [Dependency ])
606
+ :: (Maybe [Dependency ] -> PD. BuildType -> Maybe PD. SetupBuildInfo -> Maybe PD. SetupBuildInfo )
607
+ -- ^ Function to update the SetupBuildInfo of the package using those dependencies
608
+ -> (UnresolvedSourcePackage -> Maybe [Dependency ])
609
+ -- ^ Function to determine extra setup dependencies
601
610
-> DepResolverParams
602
611
-> DepResolverParams
603
- addDefaultSetupDependencies defaultSetupDeps params =
612
+ addDefaultSetupDependencies applyDefaultSetupDeps defaultSetupDeps params =
604
613
params
605
614
{ depResolverSourcePkgIndex =
606
- fmap applyDefaultSetupDeps (depResolverSourcePkgIndex params)
615
+ fmap go (depResolverSourcePkgIndex params)
607
616
}
608
617
where
609
- applyDefaultSetupDeps :: UnresolvedSourcePackage -> UnresolvedSourcePackage
610
- applyDefaultSetupDeps srcpkg =
618
+ go :: UnresolvedSourcePackage -> UnresolvedSourcePackage
619
+ go srcpkg =
611
620
srcpkg
612
621
{ srcpkgDescription =
613
622
gpkgdesc
614
623
{ PD. packageDescription =
615
624
pkgdesc
616
- { PD. setupBuildInfo =
617
- case PD. setupBuildInfo pkgdesc of
618
- Just sbi -> Just sbi
619
- Nothing -> case defaultSetupDeps srcpkg of
620
- Nothing -> Nothing
621
- Just deps
622
- | isCustom ->
623
- Just
624
- PD. SetupBuildInfo
625
- { PD. defaultSetupDepends = True
626
- , PD. setupDepends = deps
627
- }
628
- | otherwise -> Nothing
625
+ { PD. setupBuildInfo = applyDefaultSetupDeps (defaultSetupDeps srcpkg) (PD. buildType pkgdesc) (PD. setupBuildInfo pkgdesc)
629
626
}
630
627
}
631
628
}
632
629
where
633
- isCustom = PD. buildType pkgdesc == PD. Custom || PD. buildType pkgdesc == PD. Hooks
634
630
gpkgdesc = srcpkgDescription srcpkg
635
631
pkgdesc = PD. packageDescription gpkgdesc
636
632
633
+ setImplicitSetupInfo :: Maybe [Dependency ] -> PD. BuildType -> Maybe PD. SetupBuildInfo -> Maybe PD. SetupBuildInfo
634
+ setImplicitSetupInfo mdeps buildty msetupinfo =
635
+ case msetupinfo of
636
+ Just sbi -> Just sbi
637
+ Nothing -> case mdeps of
638
+ Nothing -> Nothing
639
+ Just deps
640
+ | isCustom ->
641
+ Just
642
+ PD. SetupBuildInfo
643
+ { PD. defaultSetupDepends = True
644
+ , PD. setupDepends = deps
645
+ }
646
+ | otherwise -> Nothing
647
+ where
648
+ isCustom = buildty == PD. Custom || buildty == PD. Hooks
649
+
650
+ extendSetupInfoDeps :: Maybe [Dependency ] -> PD. BuildType -> Maybe PD. SetupBuildInfo -> Maybe PD. SetupBuildInfo
651
+ extendSetupInfoDeps mDeps buildTy mSetupInfo
652
+ | Nothing <- mSetupInfo =
653
+ assert
654
+ (buildTy /= PD. Hooks ) -- Hooks needs explicit setup-depends
655
+ Nothing
656
+ | Just setupInfo <- mSetupInfo =
657
+ Just setupInfo{PD. setupDepends = PD. setupDepends setupInfo ++ fromMaybe [] mDeps}
658
+
637
659
-- | If a package has a custom setup then we need to add a setup-depends
638
660
-- on Cabal.
639
661
addSetupCabalMinVersionConstraint
@@ -713,7 +735,7 @@ standardInstallPolicy
713
735
-> [PackageSpecifier UnresolvedSourcePackage ]
714
736
-> DepResolverParams
715
737
standardInstallPolicy installedPkgIndex sourcePkgDb pkgSpecifiers =
716
- addDefaultSetupDependencies mkDefaultSetupDeps $
738
+ addDefaultSetupDependencies setImplicitSetupInfo mkDefaultSetupDeps $
717
739
basicInstallPolicy
718
740
installedPkgIndex
719
741
sourcePkgDb
0 commit comments