chs-cabal 0.1.1.2 → 0.1.1.3
raw patch · 4 files changed
+37/−34 lines, 4 filesdep ~CabalPVP: major bump suggested
API removals or changes: PVP suggests a major version bump
Dependency ranges changed: Cabal
API changes (from Hackage documentation)
- Distribution.C2Hs.TopSort: reorderC2Hs :: Verbosity -> [FilePath] -> [ModuleName] -> IO [ModuleName]
+ Distribution.C2Hs.TopSort: reorderC2Hs :: Verbosity -> [CabalDir] -> [ModuleName] -> IO [ModuleName]
Files
- CHANGELOG.md +4/−0
- chs-cabal.cabal +2/−2
- src/Distribution/C2Hs.hs +17/−24
- src/Distribution/C2Hs/TopSort.hs +14/−8
CHANGELOG.md view
@@ -1,5 +1,9 @@ # chs-cabal +## 0.1.1.3++ * Update for Cabal 3.14+ ## 0.1.1.2 * Update for Cabal 3.12
chs-cabal.cabal view
@@ -1,6 +1,6 @@ cabal-version: 1.18 name: chs-cabal-version: 0.1.1.2+version: 0.1.1.3 license: BSD3 license-file: LICENSE copyright: Copyright: (c) 2019, 2021 Vanessa McHale@@ -29,7 +29,7 @@ build-depends: base >=4.7 && <5, chs-deps,- Cabal >=3.12.0.0+ Cabal >=3.14.0.0 if impl(ghc >=8.0) ghc-options:
src/Distribution/C2Hs.hs view
@@ -1,3 +1,5 @@+{-# LANGUAGE DataKinds #-}+ -- | Everything in this module is slightly morally dubious in that it works by -- considering *all* modules to be @exposed-modules@ in the preprocessor phase. --@@ -20,9 +22,10 @@ defaultMainWithHooks, simpleUserHooks) import Distribution.Simple.LocalBuildInfo (LocalBuildInfo)-import Distribution.Simple.Setup (BuildFlags (BuildFlags, buildVerbosity),- HaddockFlags (HaddockFlags, haddockVerbosity),- ReplFlags (ReplFlags, replVerbosity),+import Distribution.Simple.Setup (BuildFlags, buildCommonFlags,+ HaddockFlags, haddockCommonFlags,+ ReplFlags, replCommonFlags,+ CommonSetupFlags (CommonSetupFlags, setupVerbosity), fromFlagOrDefault) import Distribution.Types.Benchmark import Distribution.Types.BuildInfo@@ -31,12 +34,11 @@ import Distribution.Types.Library import Distribution.Types.PackageDescription import Distribution.Types.TestSuite-import Distribution.Utils.Path (PackageDir, SourceDir,- SymbolicPath,- getSymbolicPath)+import Distribution.Utils.Path (Pkg, Source, FileOrDir (Dir),+ SymbolicPath) import Distribution.Verbosity (Verbosity, normal) -type CabalFP = SymbolicPath PackageDir SourceDir+type CabalFP = SymbolicPath Pkg (Dir Source) defaultMainC2Hs :: IO () defaultMainC2Hs = defaultMainWithHooks c2hsUserHooks@@ -48,37 +50,28 @@ , replHook = c2hsReplHooks } -reorderC2Hs' :: Verbosity -> [CabalFP] -> [ModuleName] -> IO [ModuleName]-reorderC2Hs' v fps = reorderC2Hs v (fmap getSymbolicPath fps)- -- | Custom build hooks to be used with @.chs@ files which @{\#import\#}@ one -- another. c2hsBuildHooks :: PackageDescription -> LocalBuildInfo -> UserHooks -> BuildFlags -> IO () c2hsBuildHooks = \pd lbi hooks bf -> do- let v = getVerbosity bf- pd' <- mapPackageDescription (reorderC2Hs' v) pd+ let v = getSetupVerbosity (buildCommonFlags bf)+ pd' <- mapPackageDescription (reorderC2Hs v) pd buildHook simpleUserHooks pd' lbi hooks bf c2hsHaddockHooks :: PackageDescription -> LocalBuildInfo -> UserHooks -> HaddockFlags -> IO () c2hsHaddockHooks = \pd lbi hooks hf -> do- let v = getHaddockVerbosity hf- pd' <- mapPackageDescription (reorderC2Hs' v) pd+ let v = getSetupVerbosity (haddockCommonFlags hf)+ pd' <- mapPackageDescription (reorderC2Hs v) pd haddockHook simpleUserHooks pd' lbi hooks hf c2hsReplHooks :: PackageDescription -> LocalBuildInfo -> UserHooks -> ReplFlags -> [String] -> IO () c2hsReplHooks = \pd lbi hooks rf ss -> do- let v = getReplVerbosity rf- pd' <- mapPackageDescription (reorderC2Hs' v) pd+ let v = getSetupVerbosity (replCommonFlags rf)+ pd' <- mapPackageDescription (reorderC2Hs v) pd replHook simpleUserHooks pd' lbi hooks rf ss -getHaddockVerbosity :: HaddockFlags -> Verbosity-getHaddockVerbosity HaddockFlags { haddockVerbosity = v } = fromFlagOrDefault normal v--getVerbosity :: BuildFlags -> Verbosity-getVerbosity BuildFlags { buildVerbosity = v } = fromFlagOrDefault normal v--getReplVerbosity :: ReplFlags -> Verbosity-getReplVerbosity ReplFlags { replVerbosity = v } = fromFlagOrDefault normal v+getSetupVerbosity :: CommonSetupFlags -> Verbosity+getSetupVerbosity CommonSetupFlags { setupVerbosity = v } = fromFlagOrDefault normal v mapPackageDescription :: ([CabalFP] -> [ModuleName] -> IO [ModuleName]) -> PackageDescription -> IO PackageDescription mapPackageDescription f p@PackageDescription { library = ml
src/Distribution/C2Hs/TopSort.hs view
@@ -1,3 +1,5 @@+{-# LANGUAGE DataKinds #-}+ -- | Topological sort for @.chs@ files according to @{\#import\#}@s. module Distribution.C2Hs.TopSort ( reorderC2Hs ) where @@ -7,35 +9,39 @@ import Distribution.Compat.Graph (Node (..), fromDistinctList, revTopSort)-import Distribution.ModuleName (ModuleName, toFilePath)+import Distribution.ModuleName (ModuleName) import Distribution.Parsec (simpleParsec) import Distribution.Simple.PreProcess.Types (Suffix (..))-import Distribution.Simple.Utils (findFileWithExtension,+import Distribution.Utils.Path (FileOrDir (..), Pkg, Source, (</>),+ SymbolicPath,+ interpretSymbolicPathCWD)+import Distribution.Simple.Utils (findModuleFileEx, warn) import Distribution.Verbosity (Verbosity) import Language.Haskell.CHs.Deps (getFileImports) +type CabalDir = SymbolicPath Pkg (Dir Source)+ -- | Given a list of 'ModuleName's, sort it according to @c2hs@ @{\#import\#}@ -- declarations. reorderC2Hs :: Verbosity- -> [FilePath] -- ^ Source directories+ -> [CabalDir] -- ^ Source directories -> [ModuleName] -- ^ Module names -> IO [ModuleName] -- ^ Sorted modules reorderC2Hs v dirs preMods = do - chsFiles <- traverse findCHS preMods+ chsFiles <- traverse (fmap (interpretSymbolicPathCWD . uncurry (</>)) . findCHS) preMods modDeps <- traverse (extractDeps v) (zip preMods chsFiles) pure $ fmap (\(N m _ _) -> m) (revTopSort $ fromDistinctList modDeps) - where findCHS = findFileWithExtension [Suffix ".chs"] dirs . toFilePath+ where findCHS = findModuleFileEx v dirs [Suffix ".chs"] -- | Given a 'ModuleName' and its corresponding filepath, return a 'Node' -- with its associated @c2hs@ dependencies-extractDeps :: Verbosity -> (ModuleName, Maybe FilePath) -> IO (Node ModuleName ModuleName)-extractDeps _ (m, Nothing) = pure (N m m [])-extractDeps v (m, Just f) = do+extractDeps :: Verbosity -> (ModuleName, FilePath) -> IO (Node ModuleName ModuleName)+extractDeps v (m, f) = do res <- getFileImports f mods <- case res of Right ms -> case traverse simpleParsec ms of