@@ -20,7 +20,7 @@ module Stack.Package
2020 ,readPackageUnresolved
2121 ,readPackageUnresolvedBS
2222 ,resolvePackage
23- ,getCabalFileName
23+ ,findOrGenerateCabalFile
2424 ,Package (.. )
2525 ,GetPackageFiles (.. )
2626 ,GetPackageOpts (.. )
@@ -91,6 +91,8 @@ import qualified System.Directory as D
9191import System.FilePath (splitExtensions , replaceExtension )
9292import qualified System.FilePath as FilePath
9393import System.IO.Error
94+ import qualified Hpack
95+ import qualified Hpack.Config as Hpack
9496
9597-- | Read the raw, unresolved package information.
9698readPackageUnresolved :: (MonadIO m , MonadThrow m )
@@ -141,7 +143,7 @@ readPackageDescriptionDir :: (MonadLogger m, MonadIO m, MonadThrow m, MonadCatch
141143 -> Path Abs Dir
142144 -> m (GenericPackageDescription , PackageDescription )
143145readPackageDescriptionDir config pkgDir = do
144- cabalfp <- getCabalFileName pkgDir
146+ cabalfp <- findOrGenerateCabalFile pkgDir
145147 gdesc <- liftM snd (readPackageUnresolved cabalfp)
146148 return (gdesc, resolvePackageDescription config gdesc)
147149
@@ -1049,11 +1051,15 @@ logPossibilities dirs mn = do
10491051--
10501052-- If no .cabal file is present, or more than one is present, an exception is
10511053-- thrown via 'throwM'.
1052- getCabalFileName
1054+ --
1055+ -- If the directory contains a file named package.yaml, hpack is used to
1056+ -- generate a .cabal file from it.
1057+ findOrGenerateCabalFile
10531058 :: (MonadThrow m , MonadIO m )
10541059 => Path Abs Dir -- ^ package directory
10551060 -> m (Path Abs File )
1056- getCabalFileName pkgDir = do
1061+ findOrGenerateCabalFile pkgDir = do
1062+ liftIO $ hpack pkgDir
10571063 files <- liftIO $ findFiles
10581064 pkgDir
10591065 (flip hasExtension " cabal" . FL. toFilePath)
@@ -1064,6 +1070,13 @@ getCabalFileName pkgDir = do
10641070 _: _ -> throwM $ PackageMultipleCabalFilesFound pkgDir files
10651071 where hasExtension fp x = FilePath. takeExtension fp == " ." ++ x
10661072
1073+ -- | Generate .cabal file from package.yaml, if necessary.
1074+ hpack :: Path Abs Dir -> IO ()
1075+ hpack pkgDir = do
1076+ exists <- doesFileExist (pkgDir </> $ (mkRelFile Hpack. packageConfig))
1077+ when exists $ do
1078+ Hpack. hpack (toFilePath pkgDir) True
1079+
10671080-- | Path for the package's build log.
10681081buildLogPath :: (MonadReader env m , HasBuildConfig env , MonadThrow m )
10691082 => Package -> Maybe String -> m (Path Abs File )
0 commit comments