packages feed

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 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-