simple-cabal 0.0.0.1 → 0.1.0
raw patch · 4 files changed
+359/−198 lines, 4 filesdep ~Cabal
Dependency ranges changed: Cabal
Files
- CHANGELOG.md +11/−2
- SimpleCabal.hs +342/−0
- simple-cabal.cabal +6/−7
- src/SimpleCabal.hs +0/−189
CHANGELOG.md view
@@ -2,8 +2,17 @@ `simple-cabal` uses [PVP Versioning](https://pvp.haskell.org) -## 0.0.0.1+## 0.1.0 (2019-09-30)+- add buildDependencies, setupDependencies, testsuiteDependencies+ (from cabal-rpm), and tryFindPackageDesc+- more deps compatibility: showVersion, depPkgName, exeDepName, pkgcfgDepName+- export PackageName, mkPackageName, unPackageName,+ allBuildInfo, BuildInfo, FlagName & mkFlagName, licenseFiles+- no longer export: normal+- support Cabal-3 (ghc-8.8.1)++## 0.0.0.1 (2019-07-09) - allow building with Cabal 1! -## 0.0.0+## 0.0.0 (2019-06-08) - Initially version, mostly taken from cabal-rpm PackageUtils.hs
+ SimpleCabal.hs view
@@ -0,0 +1,342 @@+{-# LANGUAGE CPP #-}++module SimpleCabal (+ findCabalFile,+ finalPackageDescription,+ getPackageId,+-- dependencies,+#if defined(MIN_VERSION_Cabal) && MIN_VERSION_Cabal(2,4,0)+ buildDepends,+#endif+ buildDependencies,+ setupDependencies,+ testsuiteDependencies,++ allBuildInfo,+ BuildInfo (..),+ depPkgName, exeDepName, pkgcfgDepName,+ FlagName, mkFlagName,+#if defined(MIN_VERSION_Cabal) && MIN_VERSION_Cabal(1,20,0)+#else+ licenseFiles,+#endif+ PackageDescription (..),+ PackageIdentifier (..),+ PackageName, mkPackageName, unPackageName,+ packageName, packageVersion,+ readGenericPackageDescription,+ showPkgId,+ showVersion,+ tryFindPackageDesc+ ) where++#if (defined(MIN_VERSION_base) && MIN_VERSION_base(4,8,0))+#else+import Control.Applicative ((<$>))+#endif++import Data.List (delete, nub)++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)+ depPkgName,+ mkPackageName,+ unPackageName,+ unPkgconfigName,+#if defined(MIN_VERSION_Cabal) && MIN_VERSION_Cabal(2,4,0)+ Dependency,+#endif+#else+#endif+#endif+#if defined(MIN_VERSION_Cabal) && MIN_VERSION_Cabal(2,0,0)+#else+ Dependency (..),+#endif+#if defined(MIN_VERSION_Cabal) && MIN_VERSION_Cabal(2,0,0)+ PackageName,+#else+ PackageName (..),+#endif+ PackageIdentifier (..),+ )++import Distribution.PackageDescription (+ PackageDescription (..),+ allBuildInfo,+ BuildInfo (..),+-- buildToolDepends,+#if defined(MIN_VERSION_Cabal) && MIN_VERSION_Cabal(2,4,0)+ enabledBuildDepends,+#endif+ extraLibs,+#if defined(MIN_VERSION_Cabal) && MIN_VERSION_Cabal(2,0,0)+ FlagName, + mkFlagName,+#else+ FlagName (..),+#endif+ GenericPackageDescription(packageDescription),+#if defined(MIN_VERSION_Cabal) && MIN_VERSION_Cabal(2,2,0)+ mkFlagAssignment,+#endif+ pkgconfigDepends,+#if defined(MIN_VERSION_Cabal) && MIN_VERSION_Cabal(1,24,0)+ setupDepends,+#endif+ targetBuildDepends,+ TestSuite (..)+ )+#if defined(MIN_VERSION_Cabal) && MIN_VERSION_Cabal(2,0,0)+import Distribution.PackageDescription.Configuration (finalizePD)+import Distribution.Types.ComponentRequestedSpec (defaultComponentRequestedSpec)+import Distribution.Types.LegacyExeDependency (LegacyExeDependency (..))+import Distribution.Types.PkgconfigDependency (PkgconfigDependency (..))+#else+import Distribution.PackageDescription.Configuration (finalizePackageDescription)+#endif+#if defined(MIN_VERSION_Cabal) && MIN_VERSION_Cabal(2,2,0)+import Distribution.PackageDescription.Parsec (readGenericPackageDescription)+#elif defined(MIN_VERSION_Cabal) && MIN_VERSION_Cabal(2,0,0)+import Distribution.PackageDescription.Parse (readGenericPackageDescription)+#else+import Distribution.PackageDescription.Parse (readPackageDescription)+#endif++import Distribution.Simple.Compiler (+#if defined(MIN_VERSION_Cabal) && MIN_VERSION_Cabal(1,22,0)+ compilerInfo+#else+ Compiler (..)+#endif+ )+import Distribution.Simple.Configure (+#if defined(MIN_VERSION_Cabal) && MIN_VERSION_Cabal(1,18,0)+ configCompilerEx+#else+ configCompiler+#endif+ )+#if defined(MIN_VERSION_Cabal) && MIN_VERSION_Cabal(2,0,0)+--import Distribution.Simple.BuildToolDepends (getAllToolDependencies)+import Distribution.Simple.Program (defaultProgramDb)+#else+import Distribution.Simple.Program (defaultProgramConfiguration)+#endif+import Distribution.Simple.Utils (+#if defined(MIN_VERSION_Cabal) && MIN_VERSION_Cabal(1,20,0)+ tryFindPackageDesc+#else+ findPackageDesc+#endif+ )++import Distribution.System (Platform (..), buildArch, buildOS)++import Distribution.Verbosity (normal,+#if defined(MIN_VERSION_Cabal) && MIN_VERSION_Cabal(2,0,0)+#else+ Verbosity+#endif+ )++#if defined(MIN_VERSION_Cabal) && MIN_VERSION_Cabal(2,2,0)+import Distribution.Pretty (prettyShow)+#else+#if defined(MIN_VERSION_Cabal) && MIN_VERSION_Cabal(2,0,0)+import Distribution.Version (showVersion)+#else+import Data.Version (showVersion)+#endif+#endif++#if defined(MIN_VERSION_Cabal) && MIN_VERSION_Cabal(2,2,0)+import qualified Distribution.Version (Version)+#endif++import System.Directory (getDirectoryContents)+import System.FilePath (takeExtension)++-- | Find the .cabal file in the current directory.+--+-- Errors if more than one or no file found.+--+-- since @0.0.0.1@+findCabalFile :: IO FilePath+findCabalFile = do+ allCabals <- filesWithExtension "." ".cabal"+ case allCabals of+ [file] -> return file+ [] -> error "No .cabal file found"+ _ -> error "More than one .cabal file found!"+ where+ filesWithExtension :: FilePath -> String -> IO [FilePath]+ filesWithExtension dir ext =+ filter (\ f -> takeExtension f == ext && head f /= '.')+ <$> getDirectoryContents dir++-- | Get the package name-version from the .cabal file in the current directory.+--+-- since @0.0.0.1@+getPackageId :: IO PackageIdentifier+getPackageId = do+ gpd <- findCabalFile >>= readGenericPackageDescription normal+ return $ package $ packageDescription gpd++#if defined(MIN_VERSION_Cabal) && MIN_VERSION_Cabal(2,0,0)+#else+readGenericPackageDescription :: Verbosity+ -> FilePath -> IO GenericPackageDescription+readGenericPackageDescription = readPackageDescription+#endif++-- | Generate PackageDescription from the specified .cabal file and flags.+--+-- since @0.0.0.1@+finalPackageDescription :: [(FlagName, Bool)] -> FilePath+ -> IO PackageDescription+finalPackageDescription flags cabalfile = do+#if defined(MIN_VERSION_Cabal) && MIN_VERSION_Cabal(2,0,0)+#else+ let defaultProgramDb = defaultProgramConfiguration+#endif+ genPkgDesc <- readGenericPackageDescription normal cabalfile+ compiler <- do+#if defined(MIN_VERSION_Cabal) && MIN_VERSION_Cabal(1,18,0)+ (compiler, _, _) <- configCompilerEx+#else+ (compiler, _) <- configCompiler+#endif+ (Just GHC) Nothing Nothing defaultProgramDb normal+#if defined(MIN_VERSION_Cabal) && MIN_VERSION_Cabal(1,22,0)+ return (compilerInfo compiler)+#else+ return (compilerId compiler)+#endif+#if defined(MIN_VERSION_Cabal) && MIN_VERSION_Cabal(2,2,0)+#else+ let mkFlagAssignment = id+#endif+#if defined(MIN_VERSION_Cabal) && MIN_VERSION_Cabal(2,0,0)+ let finalizePackageDescription flags' = finalizePD flags' defaultComponentRequestedSpec+#endif+ let final =+ finalizePackageDescription (mkFlagAssignment flags)+ (const True) (Platform buildArch buildOS)+ compiler+ [] genPkgDesc+ case final of+ Left e -> error $ "finalize failed: " ++ show e+ Right res -> return $ fst res++-- | Return the list of build dependencies of a package, excluding itself+buildDependencies :: PackageDescription -> [PackageName]+buildDependencies pkgDesc =+ let deps = nub $ map depPkgName (buildDepends pkgDesc)+ self = pkgName $ package pkgDesc+ in delete self deps++-- | Return the list of testsuite dependencies of a package, excluding itself+testsuiteDependencies :: PackageDescription -> [PackageName]+testsuiteDependencies pkgDesc =+ let self = pkgName $ package pkgDesc in+ delete self . nub . map depPkgName $ concatMap (targetBuildDepends . testBuildInfo) (testSuites pkgDesc)++packageVersion :: PackageIdentifier -> String+packageVersion =+#if defined(MIN_VERSION_Cabal) && MIN_VERSION_Cabal(2,2,0)+ prettyShow . pkgVersion+#else+ showVersion . pkgVersion+#endif++showPkgId :: PackageIdentifier -> String+showPkgId pkgid =+#if defined(MIN_VERSION_Cabal) && MIN_VERSION_Cabal(2,2,0)+ prettyShow pkgid+#else+ unPackageName (packageName pkgid) ++ "-" ++ packageVersion pkgid+#endif++#if defined(MIN_VERSION_Cabal) && MIN_VERSION_Cabal(1,22,0)+#else+unPackageName :: PackageName -> String+unPackageName (PackageName n) = n+#endif++#if defined(MIN_VERSION_Cabal) && MIN_VERSION_Cabal(2,2,0)+showVersion :: Distribution.Version.Version -> String+showVersion = prettyShow+#endif++#if defined(MIN_VERSION_Cabal) && MIN_VERSION_Cabal(2,0,0)+#else+mkFlagName :: String -> FlagName+mkFlagName = FlagName+#endif++#if defined(MIN_VERSION_Cabal) && MIN_VERSION_Cabal(1,20,0)+#else+tryFindPackageDesc :: FilePath -> IO FilePath+tryFindPackageDesc = findPackageDesc+#endif++#if defined(MIN_VERSION_Cabal) && MIN_VERSION_Cabal(1,20,0)+#else+licenseFiles :: PackageDescription -> [FilePath]+licenseFiles pkgDesc =+ [licenseFile pkgDesc | licenseFile pkgDesc /= ""]+#endif++#if defined(MIN_VERSION_Cabal) && MIN_VERSION_Cabal(2,4,0)+buildDepends :: PackageDescription -> [Dependency]+buildDepends = flip enabledBuildDepends defaultComponentRequestedSpec+#endif++#if defined(MIN_VERSION_Cabal) && MIN_VERSION_Cabal(2,0,0)+exeDepName :: LegacyExeDependency -> String+exeDepName (LegacyExeDependency n _) = n++pkgcfgDepName :: PkgconfigDependency -> String+pkgcfgDepName (PkgconfigDependency n _) = unPkgconfigName n+#else+depPkgName :: Dependency -> PackageName+depPkgName (Dependency pn _) = pn++exeDepName :: Dependency -> String+exeDepName = unPackageName . depPkgName++pkgcfgDepName :: Dependency -> String+pkgcfgDepName = unPackageName . depPkgName+#endif++#if defined(MIN_VERSION_Cabal) && MIN_VERSION_Cabal(2,0,0)+#else+mkPackageName :: String -> PackageName+mkPackageName = PackageName+#endif++setupDependencies :: PackageDescription -- ^pkg description+ -> [PackageName] -- ^depends+#if defined(MIN_VERSION_Cabal) && MIN_VERSION_Cabal(1,24,0)+setupDependencies pkgDesc =+ maybe [] (map depPkgName . setupDepends) (setupBuildInfo pkgDesc)+#else+setupDependencies _pkgDesc = []+#endif++-- dependencies :: PackageDescription -- ^pkg description+-- -> ([PackageName], [PackageName], [ExeDependency], [String], [PkgconfigDependency])+-- -- ^depends, setup, tools, c-libs, pkgcfg+-- dependencies pkgDesc =+-- let --self = pkgName $ package pkgDesc+-- deps = buildDependencies pkgDesc+-- setup = setupDependencies pkgDesc+-- buildinfo = allBuildInfo pkgDesc+-- tools = nub $ concatMap buildToolDepends buildinfo+-- clibs = nub $ concatMap extraLibs buildinfo+-- pkgcfgs = nub $ concatMap pkgconfigDepends buildinfo+-- in (deps, setup, tools, clibs, pkgcfgs)
simple-cabal.cabal view
@@ -1,9 +1,9 @@ cabal-version: >= 1.10 name: simple-cabal-version: 0.0.0.1+version: 0.1.0 synopsis: Cabal file wrapper library-description: Cabal compatibility layer for reading and- parsing .cabal files+description: Find and read .cabal files, and+ a Cabal dependency compatibility layer. homepage: https://github.com/juhp/simple-cabal bug-reports: https://github.com/juhp/simple-cabal/issues license: BSD3@@ -15,16 +15,15 @@ build-type: Simple extra-source-files: README.md , CHANGELOG.md-tested-with: 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 == 7.6.3, GHC == 7.4.2,- GHC == 7.0.4+tested-with: GHC == 8.8.1, 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 == 7.6.3,+ GHC == 7.4.2, GHC == 7.0.4 source-repository head type: git location: https://github.com/juhp/simple-cabal.git library- hs-source-dirs: src exposed-modules: SimpleCabal
− src/SimpleCabal.hs
@@ -1,189 +0,0 @@-{-# LANGUAGE CPP #-}--module SimpleCabal- ( findCabalFile- , finalPackageDescription- , getPackageId- , normal- , PackageDescription (..)- , PackageIdentifier (..)- , packageName, packageVersion- , readGenericPackageDescription- , showPkgId- ) where--#if (defined(MIN_VERSION_base) && MIN_VERSION_base(4,8,0))-#else-import Control.Applicative ((<$>))-#endif--import Distribution.Compiler-import Distribution.Package (PackageIdentifier (..),-#if defined(MIN_VERSION_Cabal) && MIN_VERSION_Cabal(1,22,0)- unPackageName-#else- PackageName (..)-#endif- )-import Distribution.PackageDescription - (PackageDescription (..),-#if defined(MIN_VERSION_Cabal) && MIN_VERSION_Cabal(2,0,0)- FlagName, -#else- FlagName (..),-#endif- GenericPackageDescription(packageDescription),-#if defined(MIN_VERSION_Cabal) && MIN_VERSION_Cabal(2,2,0)- mkFlagAssignment-#endif- )-#if defined(MIN_VERSION_Cabal) && MIN_VERSION_Cabal(2,0,0)-import Distribution.PackageDescription.Configuration (finalizePD)-import Distribution.Types.ComponentRequestedSpec (defaultComponentRequestedSpec)-#else-import Distribution.PackageDescription.Configuration (finalizePackageDescription)-#endif-#if defined(MIN_VERSION_Cabal) && MIN_VERSION_Cabal(2,2,0)-import Distribution.PackageDescription.Parsec (readGenericPackageDescription)-#elif defined(MIN_VERSION_Cabal) && MIN_VERSION_Cabal(2,0,0)-import Distribution.PackageDescription.Parse (readGenericPackageDescription)-#else-import Distribution.PackageDescription.Parse (readPackageDescription)-#endif--import Distribution.Simple.Compiler (-#if defined(MIN_VERSION_Cabal) && MIN_VERSION_Cabal(1,22,0)- compilerInfo-#else- Compiler (..)-#endif- )-import Distribution.Simple.Configure (-#if defined(MIN_VERSION_Cabal) && MIN_VERSION_Cabal(1,18,0)- configCompilerEx-#else- configCompiler-#endif- )-#if defined(MIN_VERSION_Cabal) && MIN_VERSION_Cabal(2,0,0)-import Distribution.Simple.Program (defaultProgramDb)-#else-import Distribution.Simple.Program (defaultProgramConfiguration)-#endif-import Distribution.System (Platform (..), buildArch, buildOS)-import Distribution.Verbosity (normal,-#if defined(MIN_VERSION_Cabal) && MIN_VERSION_Cabal(2,0,0)-#else- Verbosity-#endif- )--#if defined(MIN_VERSION_Cabal) && MIN_VERSION_Cabal(2,0,0)-#if defined(MIN_VERSION_Cabal) && MIN_VERSION_Cabal(2,2,0)-import Distribution.Pretty (prettyShow)-#else-import qualified Distribution.Version (showVersion, Version)-#endif-#else-import qualified Data.Version (- showVersion,-#if (defined(MIN_VERSION_base) && MIN_VERSION_base(4,8,0))- Version,-#else- Version(..)-#endif- )-#endif--import System.Directory (getDirectoryContents)-import System.FilePath (takeExtension)--type Flags = [(FlagName, Bool)]--findCabalFile :: IO FilePath-findCabalFile = do- allCabals <- filesWithExtension "." ".cabal"- case allCabals of- [file] -> return file- [] -> error "No .cabal file found"- _ -> error "More than one .cabal file found!"- where- filesWithExtension :: FilePath -> String -> IO [FilePath]- filesWithExtension dir ext =- filter (\ f -> takeExtension f == ext) <$> getDirectoryContents dir--getPackageId :: IO PackageIdentifier-getPackageId = do- gpd <- findCabalFile >>= readGenericPackageDescription normal- return $ package $ packageDescription gpd--#if defined(MIN_VERSION_Cabal) && MIN_VERSION_Cabal(2,0,0)-#else-readGenericPackageDescription :: Distribution.Verbosity.Verbosity- -> FilePath -> IO GenericPackageDescription-readGenericPackageDescription = readPackageDescription-#endif--finalPackageDescription :: Flags -> FilePath- -> IO PackageDescription-finalPackageDescription flags cabalfile = do-#if defined(MIN_VERSION_Cabal) && MIN_VERSION_Cabal(2,0,0)-#else- let defaultProgramDb = defaultProgramConfiguration-#endif- genPkgDesc <- readGenericPackageDescription normal cabalfile- compiler <- do-#if defined(MIN_VERSION_Cabal) && MIN_VERSION_Cabal(1,18,0)- (compiler, _, _) <- configCompilerEx-#else- (compiler, _) <- configCompiler-#endif- (Just GHC) Nothing Nothing defaultProgramDb normal-#if defined(MIN_VERSION_Cabal) && MIN_VERSION_Cabal(1,22,0)- return (compilerInfo compiler)-#else- return (compilerId compiler)-#endif-#if defined(MIN_VERSION_Cabal) && MIN_VERSION_Cabal(2,2,0)-#else- let mkFlagAssignment = id-#endif-#if defined(MIN_VERSION_Cabal) && MIN_VERSION_Cabal(2,0,0)- let finalizePackageDescription flags' = finalizePD flags' defaultComponentRequestedSpec-#endif- let final =- finalizePackageDescription (mkFlagAssignment flags)- (const True) (Platform buildArch buildOS)- compiler- [] genPkgDesc- case final of- Left e -> error $ "finalize failed: " ++ show e- Right res -> return $ fst res--#if defined(MIN_VERSION_Cabal) && MIN_VERSION_Cabal(1,22,0)-#else-unPackageName :: PackageName -> String-unPackageName (PackageName n) = n-#endif--packageName :: PackageIdentifier -> String-packageName = unPackageName . pkgName--packageVersion :: PackageIdentifier -> String-packageVersion = prettyShow . pkgVersion--#if defined(MIN_VERSION_Cabal) && MIN_VERSION_Cabal(2,2,0)-#else-#if defined(MIN_VERSION_Cabal) && MIN_VERSION_Cabal(2,0,0)-prettyShow :: Distribution.Version.Version -> String-prettyShow = Distribution.Version.showVersion-#else-prettyShow :: Data.Version.Version -> String-prettyShow = Data.Version.showVersion-#endif-#endif--showPkgId :: PackageIdentifier -> String-showPkgId pkgid =- packageName pkgid ++ "-" ++ packageVersion pkgid-