@@ -20,7 +20,7 @@ module Stack.Package
2020 ,readPackageUnresolved
2121 ,readPackageUnresolvedBS
2222 ,resolvePackage
23- ,getCabalFileName
23+ ,findOrGenerateCabalFile
2424 ,Package (.. )
2525 ,GetPackageFiles (.. )
2626 ,GetPackageOpts (.. )
@@ -93,6 +93,8 @@ import qualified System.Directory as D
9393import System.FilePath (splitExtensions , replaceExtension )
9494import qualified System.FilePath as FilePath
9595import System.IO.Error
96+ import qualified Hpack
97+ import qualified Hpack.Config as Hpack
9698
9799packageIdentifier :: Package -> Stack.Types.PackageIdentifier. PackageIdentifier
98100packageIdentifier pkg =
@@ -149,7 +151,7 @@ readPackageDescriptionDir :: (MonadLogger m, MonadIO m, MonadThrow m, MonadCatch
149151 -> Path Abs Dir
150152 -> m (GenericPackageDescription , PackageDescription )
151153readPackageDescriptionDir config pkgDir = do
152- cabalfp <- getCabalFileName pkgDir
154+ cabalfp <- findOrGenerateCabalFile pkgDir
153155 gdesc <- liftM snd (readPackageUnresolved cabalfp)
154156 return (gdesc, resolvePackageDescription config gdesc)
155157
@@ -1057,11 +1059,15 @@ logPossibilities dirs mn = do
10571059--
10581060-- If no .cabal file is present, or more than one is present, an exception is
10591061-- thrown via 'throwM'.
1060- getCabalFileName
1062+ --
1063+ -- If the directory contains a file named package.yaml, hpack is used to
1064+ -- generate a .cabal file from it.
1065+ findOrGenerateCabalFile
10611066 :: (MonadThrow m , MonadIO m )
10621067 => Path Abs Dir -- ^ package directory
10631068 -> m (Path Abs File )
1064- getCabalFileName pkgDir = do
1069+ findOrGenerateCabalFile pkgDir = do
1070+ liftIO $ hpack pkgDir
10651071 files <- liftIO $ findFiles
10661072 pkgDir
10671073 (flip hasExtension " cabal" . FL. toFilePath)
@@ -1072,6 +1078,13 @@ getCabalFileName pkgDir = do
10721078 _: _ -> throwM $ PackageMultipleCabalFilesFound pkgDir files
10731079 where hasExtension fp x = FilePath. takeExtension fp == " ." ++ x
10741080
1081+ -- | Generate .cabal file from package.yaml, if necessary.
1082+ hpack :: Path Abs Dir -> IO ()
1083+ hpack pkgDir = do
1084+ exists <- doesFileExist (pkgDir </> $ (mkRelFile Hpack. packageConfig))
1085+ when exists $ do
1086+ Hpack. hpack (toFilePath pkgDir) True
1087+
10751088-- | Path for the package's build log.
10761089buildLogPath :: (MonadReader env m , HasBuildConfig env , MonadThrow m )
10771090 => Package -> Maybe String -> m (Path Abs File )
0 commit comments