simple-cabal 0.1.3.1 → 0.2.0
raw patch · 4 files changed
+106/−52 lines, 4 filesdep +safe
Dependencies added: safe
Files
- ChangeLog.md +9/−0
- README.md +10/−2
- SimpleCabal.hs +79/−44
- simple-cabal.cabal +8/−6
ChangeLog.md view
@@ -2,6 +2,15 @@ `simple-cabal` uses [PVP Versioning](https://pvp.haskell.org) +## 0.2.0 (2025-09-17)+- support Cabal 3.14:+- readGenericPackageDescription' replaces readGenericPackageDescription+ (which changed type for Cabal >= 3.14)+- tryFindPackageDesc' replaces tryFindPackageDesc to allow for Cabal >= 3.14+- add simpleParsec (Cabal >= 2.2)+- export UnqualComponentName, mkUnqualComponentName (Cabal >= 2.0)+- export unUnqualComponentName+ ## 0.1.3 (2020-10-04) - add allLibraries (from Cabal>= 2.0) and Library - deprecate allBuildInfo
README.md view
@@ -5,8 +5,10 @@ [](http://stackage.org/lts/package/simple-cabal) [](http://stackage.org/nightly/package/simple-cabal) -A small compatibility wrapper over Cabal.+A small compatibility wrapper library over Cabal. +## Examples+ ``` pkgid <- getPackageId putStrLn $ showPkgId pkgid@@ -14,5 +16,11 @@ ``` cabalfile <- findCabalFile-genPkgDesc <- readGenericPackageDescription normal cabalfile+genPkgDesc <- readGenericPackageDescription' normal cabalfile ```++## Contribute++simple-cabal is distributed under a BSD3 license.++Contributions are welcome at <https://github.com/juhp/simple-cabal>
SimpleCabal.hs view
@@ -10,7 +10,7 @@ makeFinalPackageDescription, getPackageId, -- dependencies,-#if defined(MIN_VERSION_Cabal) && MIN_VERSION_Cabal(2,4,0)+#if MIN_VERSION_Cabal(2,4,0) buildDepends, #endif buildDependencies,@@ -22,24 +22,30 @@ BuildInfo (..), Library(..), depPkgName, exeDepName, pkgcfgDepName,+#if MIN_VERSION_Cabal(2,0,0)+ UnqualComponentName, mkUnqualComponentName,+#endif+ unUnqualComponentName, FlagName, mkFlagName, hasExes, hasLibs,-#if defined(MIN_VERSION_Cabal) && MIN_VERSION_Cabal(1,20,0)-#else+#if !MIN_VERSION_Cabal(1,20,0) licenseFiles, #endif PackageDescription (..), PackageIdentifier (..), PackageName, mkPackageName, unPackageName, packageName, packageVersion,- readGenericPackageDescription,+ readGenericPackageDescription', showPkgId, showVersion, simpleParse,- tryFindPackageDesc+#if MIN_VERSION_Cabal(2,2,0)+ simpleParsec,+#endif+ tryFindPackageDesc' ) where -#if (defined(MIN_VERSION_base) && MIN_VERSION_base(4,8,0))+#if MIN_VERSION_base(4,8,0) #else import Control.Applicative ((<$>)) #endif@@ -55,23 +61,23 @@ import Distribution.Compiler import Distribution.Package ( packageName,-#if defined(MIN_VERSION_Cabal) && MIN_VERSION_Cabal(1,22,0)-#if defined(MIN_VERSION_Cabal) && MIN_VERSION_Cabal(2,0,0)+#if MIN_VERSION_Cabal(1,22,0)+#if MIN_VERSION_Cabal(2,0,0) depPkgName, mkPackageName, unPackageName, unPkgconfigName,-#if defined(MIN_VERSION_Cabal) && MIN_VERSION_Cabal(2,4,0)+#if MIN_VERSION_Cabal(2,4,0) Dependency, #endif #else #endif #endif-#if defined(MIN_VERSION_Cabal) && MIN_VERSION_Cabal(2,0,0)+#if MIN_VERSION_Cabal(2,0,0) #else Dependency (..), #endif-#if defined(MIN_VERSION_Cabal) && MIN_VERSION_Cabal(2,0,0)+#if MIN_VERSION_Cabal(2,0,0) PackageName, #else PackageName (..),@@ -115,22 +121,29 @@ import Distribution.Types.ComponentRequestedSpec (defaultComponentRequestedSpec) import Distribution.Types.LegacyExeDependency (LegacyExeDependency (..)) import Distribution.Types.PkgconfigDependency (PkgconfigDependency (..))+import Distribution.Types.UnqualComponentName (UnqualComponentName(),+ mkUnqualComponentName,+ unUnqualComponentName+ ) #else import Distribution.PackageDescription.Configuration (finalizePackageDescription) #endif #if MIN_VERSION_Cabal(2,2,0)-import Distribution.PackageDescription.Parsec- (-#if !MIN_VERSION_Cabal(3,8,0)- readGenericPackageDescription,-#endif- parseGenericPackageDescriptionMaybe)+import qualified Distribution.PackageDescription.Parsec as DPP #elif MIN_VERSION_Cabal(2,0,0)-import Distribution.PackageDescription.Parse (readGenericPackageDescription)+import qualified Distribution.PackageDescription.Parse as DPP #else-import Distribution.PackageDescription.Parse (readPackageDescription)+import qualified Distribution.PackageDescription.Parse as DPP #endif +#if MIN_VERSION_Cabal(3,0,0)+import Distribution.Parsec (simpleParsec)+#else+#if MIN_VERSION_Cabal(2,2,0)+import Distribution.Parsec.Class (simpleParsec)+#endif+#endif+ import Distribution.Simple.Compiler ( #if MIN_VERSION_Cabal(1,22,0) compilerInfo@@ -146,7 +159,7 @@ #endif ) #if MIN_VERSION_Cabal(3,8,0)-import Distribution.Simple.PackageDescription (readGenericPackageDescription)+import qualified Distribution.Simple.PackageDescription as DSP #endif #if MIN_VERSION_Cabal(2,0,0) --import Distribution.Simple.BuildToolDepends (getAllToolDependencies)@@ -154,6 +167,9 @@ #else import Distribution.Simple.Program (defaultProgramConfiguration) #endif+#if MIN_VERSION_Cabal(3,14,0)+import Distribution.Utils.Path (interpretSymbolicPath, makeSymbolicPath)+#endif import qualified Distribution.Simple.Utils as DSU ( #if MIN_VERSION_Cabal(1,20,0) tryFindPackageDesc@@ -161,15 +177,11 @@ findPackageDesc #endif )- import Distribution.System (Platform (..), buildArch, buildOS) import Distribution.Text (simpleParse) -import Distribution.Verbosity (normal,-#if !MIN_VERSION_Cabal(2,0,0)- Verbosity-#endif+import Distribution.Verbosity (normal, Verbosity ) #if MIN_VERSION_Cabal(2,2,0)@@ -186,6 +198,7 @@ import qualified Distribution.Version (Version) #endif +import Safe (headMay) import System.Directory (getDirectoryContents) import System.FilePath (takeExtension) @@ -204,7 +217,7 @@ where filesWithExtension :: FilePath -> String -> IO [FilePath] filesWithExtension dir ext =- filter (\ f -> takeExtension f == ext && head f /= '.')+ filter (\ f -> takeExtension f == ext && headMay f /= Just '.') <$> getDirectoryContents dir -- | Get the package name-version from the .cabal file in the current directory.@@ -212,15 +225,9 @@ -- @since 0.0.0.1 getPackageId :: IO PackageIdentifier getPackageId = do- gpd <- findCabalFile >>= readGenericPackageDescription normal+ gpd <- findCabalFile >>= readGenericPackageDescription' normal return $ package $ packageDescription gpd -#if !MIN_VERSION_Cabal(2,0,0)-readGenericPackageDescription :: Verbosity- -> FilePath -> IO GenericPackageDescription-readGenericPackageDescription = readPackageDescription-#endif- #if MIN_VERSION_Cabal(2,2,0) -- | only available with Cabal-2.2+ --@@ -228,7 +235,7 @@ parseFinalPackageDescription :: [(FlagName, Bool)] -> B.ByteString -> IO (Maybe PackageDescription) parseFinalPackageDescription flags cabalfile = do- let mgenPkgDesc = parseGenericPackageDescriptionMaybe cabalfile+ let mgenPkgDesc = DPP.parseGenericPackageDescriptionMaybe cabalfile case mgenPkgDesc of Nothing -> return Nothing Just genPkgDesc -> Just <$> makeFinalPackageDescription flags genPkgDesc@@ -243,6 +250,27 @@ -> IO PackageDescription finalPackageDescription = readFinalPackageDescription +-- | Legacy version of readGenericPackageDescription+-- which doesn't use SymbolicPath (or workdir)+--+-- since 0.2.0+readGenericPackageDescription' :: Verbosity -> FilePath -> IO GenericPackageDescription+readGenericPackageDescription' verb file =+#if MIN_VERSION_Cabal(3,8,0)+ DSP.readGenericPackageDescription verb+#elif MIN_VERSION_Cabal(2,0,0)+ DPP.readGenericPackageDescription verb+#else+ DPP.readPackageDescription verb+#endif+-- DPP.readGenericPackageDescription verb+#if MIN_VERSION_Cabal(3,14,0)+ Nothing $+ makeSymbolicPath+#endif+ file++ -- | get PackageDescription from a cabal file -- -- deprecates finalPackageDescription@@ -251,7 +279,7 @@ readFinalPackageDescription :: [(FlagName, Bool)] -> FilePath -> IO PackageDescription readFinalPackageDescription flags cabalfile =- readGenericPackageDescription normal cabalfile >>=+ readGenericPackageDescription' normal cabalfile >>= makeFinalPackageDescription flags -- | convert a GenericPackageDescription to a final PackageDescription@@ -337,16 +365,19 @@ mkFlagName = FlagName #endif --- | Find cabal file-tryFindPackageDesc :: FilePath -> IO FilePath-tryFindPackageDesc =-#if MIN_VERSION_Cabal(1,20,0)- DSU.tryFindPackageDesc-#if MIN_VERSION_Cabal(3,0,0)- normal-#endif+-- | Find cabal file in current directory+--+-- since 0.2.0+tryFindPackageDesc' :: IO FilePath+tryFindPackageDesc' =+#if MIN_VERSION_Cabal(3,14,0)+ interpretSymbolicPath Nothing <$> DSU.tryFindPackageDesc normal Nothing+#elif MIN_VERSION_Cabal(3,0,0)+ DSU.tryFindPackageDesc normal "."+#elif MIN_VERSION_Cabal(1,20,0)+ DSU.tryFindPackageDesc "." #else- DSU.findPackageDesc+ DSU.findPackageDesc "." #endif #if !MIN_VERSION_Cabal(1,20,0)@@ -382,6 +413,10 @@ -- | name of dependency pkgcfgDepName :: Dependency -> String pkgcfgDepName = unPackageName . depPkgName++-- | name of unqualified component+unUnqualComponentName :: String -> String+unUnqualComponentName = id #endif #if !MIN_VERSION_Cabal(2,0,0)
simple-cabal.cabal view
@@ -1,7 +1,7 @@ cabal-version: >= 1.10 name: simple-cabal-version: 0.1.3.1-synopsis: Cabal file wrapper library+version: 0.2.0+synopsis: Cabal compatibility wrapper library description: Find and read .cabal files, and a Cabal dependency compatibility layer. homepage: https://github.com/juhp/simple-cabal@@ -10,14 +10,15 @@ license-file: LICENSE author: Jens Petersen maintainer: juhpetersen@gmail.com-copyright: 2019-2020,2022 Jens Petersen+copyright: 2019-2020,2022-2023,2025 Jens Petersen category: Distribution build-type: Simple extra-source-files: README.md , ChangeLog.md-tested-with: GHC == 9.0.2, GHC == 9.2.5, GHC == 9.4.3+tested-with: GHC == 9.12.2, GHC == 9.10.2, GHC == 9.8.4,+ GHC == 9.0.2, GHC == 9.2.8, GHC == 9.4.8, GHC == 9.6.7, GHC == 8.10.7, GHC == 8.8.4, GHC == 8.6.5, GHC == 8.4.4,- GHC == 8.2.2, GHC == 8.0.2, GHC == 7.10.3, GHC == 7.8.4+ GHC == 8.2.2, GHC == 8.0.2 source-repository head type: git@@ -30,7 +31,8 @@ bytestring, Cabal, directory,- filepath+ filepath,+ safe default-language: Haskell2010