aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/Distribution/Helper.hs16
-rw-r--r--src/CabalHelper/Compiletime/Types.hs10
-rw-r--r--tests/GhcSession.hs2
3 files changed, 18 insertions, 10 deletions
diff --git a/lib/Distribution/Helper.hs b/lib/Distribution/Helper.hs
index d25786c..38f819f 100644
--- a/lib/Distribution/Helper.hs
+++ b/lib/Distribution/Helper.hs
@@ -209,18 +209,20 @@ mkQueryEnv projloc distdir = do
}
-- | Construct paths to project configuration files given where the project is.
-projConf :: ProjLoc pt -> ProjConf pt
-projConf (ProjLocCabalFile cabal_file) =
- ProjConfV1 cabal_file
+projConf :: ProjLoc pt -> IO (ProjConf pt)
+projConf (ProjLocV1Dir pkgdir) =
+ ProjConfV1 <$> findCabalFile pkgdir
+projConf (ProjLocV1CabalFile cabal_file) = return $
+ ProjConfV1 cabal_file
projConf (ProjLocV2Dir projdir_path) =
projConf $ ProjLocV2File $ projdir_path </> "cabal.project"
-projConf (ProjLocV2File proj_file) =
+projConf (ProjLocV2File proj_file) = return $
ProjConfV2
{ pcV2CabalProjFile = proj_file
, pcV2CabalProjLocalFile = proj_file <.> "local"
, pcV2CabalProjFreezeFile = proj_file <.> "freeze"
}
-projConf (ProjLocStackYaml stack_yaml) =
+projConf (ProjLocStackYaml stack_yaml) = return $
ProjConfStack
{ pcStackYaml = stack_yaml }
@@ -313,7 +315,7 @@ checkUpdateProjInfo
-> Maybe (ProjInfo pt)
-> IO (ProjInfo pt)
checkUpdateProjInfo qe mproj_info = do
- let proj_conf = projConf (qeProjLoc qe)
+ proj_conf <- projConf (qeProjLoc qe)
mtime <- getProjConfModTime proj_conf
case mproj_info of
Nothing -> reconf proj_conf mtime
@@ -374,7 +376,7 @@ discardInactiveUnitInfos active_units uis0 =
-- system (@cabal@ or @stack@).
shallowReconfigureProject :: QueryEnvI c pt -> IO ()
shallowReconfigureProject QueryEnv
- { qeProjLoc = ProjLocCabalFile _cabal_file
+ { qeProjLoc = _
, qeDistDir = DistDirV1 _distdirv1 } =
return ()
shallowReconfigureProject QueryEnv
diff --git a/src/CabalHelper/Compiletime/Types.hs b/src/CabalHelper/Compiletime/Types.hs
index 95eea9f..cffa663 100644
--- a/src/CabalHelper/Compiletime/Types.hs
+++ b/src/CabalHelper/Compiletime/Types.hs
@@ -66,7 +66,12 @@ data ProjLoc (pt :: ProjType) where
-- ending in @.cabal@ existing in the directory. More than one such files
-- existing is a user error. Note: For this project type the concepts of
-- project and package coincide.
- ProjLocCabalFile :: { plCabalFile :: !FilePath } -> ProjLoc 'V1
+ ProjLocV1CabalFile :: { plCabalFile :: !FilePath } -> ProjLoc 'V1
+
+ -- | A @cabal v1-build@ project directory. Same as 'ProjLocV1CabalFile' but
+ -- will search for the cabal file for you. If more than one @.cabal@ file
+ -- exists it will shamelessly throw an obscure exception.
+ ProjLocV1Dir :: { plPackageDir :: !FilePath } -> ProjLoc 'V1
-- | A @cabal v2-build@ project\'s marker file is called
-- @cabal.project@. This configuration file points to the packages that make
@@ -81,7 +86,8 @@ data ProjLoc (pt :: ProjType) where
deriving instance Show (ProjLoc pt)
plV1Dir :: ProjLoc 'V1 -> FilePath
-plV1Dir (ProjLocCabalFile cabal_file) = takeDirectory cabal_file
+plV1Dir (ProjLocV1CabalFile cabal_file) = takeDirectory cabal_file
+plV1Dir (ProjLocV1Dir pkgdir) = pkgdir
data DistDir (pt :: ProjType) where
-- | Build directory for cabal /old-build/ aka. /v1-build/ aka. just
diff --git a/tests/GhcSession.hs b/tests/GhcSession.hs
index 2fda204..91e30aa 100644
--- a/tests/GhcSession.hs
+++ b/tests/GhcSession.hs
@@ -347,7 +347,7 @@ oldBuildProjSetup :: ProjSetup0
oldBuildProjSetup = ProjSetupDescr "cabal-v1" $ Right $ Ex $ ProjSetupImpl
{ psiProjType = SV1
, psiDistDir = \dir -> DistDirV1 (dir </> "dist")
- , psiProjLoc = \(CabalFile cf) _projdir -> ProjLocCabalFile cf
+ , psiProjLoc = \(CabalFile cf) _projdir -> ProjLocV1CabalFile cf
, psiConfigure = \dir ->
runWithCwd dir "cabal" [ "configure" ]
, psiBuild = \dir ->