packages feed

cabal-doctest 1.0.7 → 1.0.8

raw patch · 4 files changed

+123/−67 lines, 4 filesdep ~Cabaldep ~basePVP ok

version bump matches the API change (PVP)

Dependency ranges changed: Cabal, base

API changes (from Hackage documentation)

Files

ChangeLog.md view
@@ -1,4 +1,9 @@-# 1.0.7 -- 2019-??-??+# 1.0.8 -- 2019-10-02++* Pass `-package-env=-` when compiler supports it+* Amend examples to `unsetEnv "GHC_ENVIRONMENT"`++# 1.0.7 -- 2019-08-26  * Make `Distribution.Extra.Doctest` `-Wall`-clean * Support GHC-8.8, base-4.13, and Cabal-3.0
README.md view
@@ -49,16 +49,24 @@  import Build_doctests (flags, pkgs, module_sources) import Data.Foldable (traverse_)+import System.Environment.Compat (unsetEnv) import Test.DocTest (doctest)  main :: IO () main = do     traverse_ putStrLn args -- optionally print arguments+    unsetEnv "GHC_ENVIRONMENT" -- see 'Notes'; you may not need this     doctest args   where     args = flags ++ pkgs ++ module_sources ``` +(The `System.Environment.Compat` module is from the `base-compat`+package. That's already in the transitive closure of `doctest`'s+dependencies. `System.Environment.unsetEnv` was added with GHC 7.8 so,+if you don't need to support versions of GHC older than 7.8, you can+use `System.Environment` from `base` instead.)+ Example with multiple .cabal components --------------------------------------- @@ -86,6 +94,7 @@  import Build_doctests (Component (..), components) import Data.Foldable (for_)+import System.Environment.Compat (unsetEnv) import Test.DocTest (doctest)  main :: IO ()@@ -94,6 +103,7 @@     putStrLn "----------------------------------------"     let args = flags ++ pkgs ++ sources     for_ args putStrLn+    unsetEnv "GHC_ENVIRONMENT"     doctest args ``` @@ -114,10 +124,12 @@        (flags,            pkgs,            module_sources,         flags_exe_my_exe, pkgs_exe_my_exe, module_sources_exe_my_exe) import Data.Foldable (traverse_)+import System.Environment.Compat (unsetEnv) import Test.DocTest  main :: IO () main = do+    unsetEnv "GHC_ENVRIONMENT"     -- doctests for library     traverse_ putStrLn libArgs     doctest libArgs@@ -220,6 +232,20 @@       polyQuickCheck         :: Language.Haskell.TH.Syntax.Name -> Language.Haskell.TH.Lib.ExpQ ```++* From version 2, Stack sets the `GHC_ENVRIONMENT` variable, and GHC+  (as invoked by `doctest`) will pick that up. This is undesirable:+  `cabal-doctest` passes all the necessary information on the command+  line already, and can lead to ambiguous module errors as GHC will+  load the environment in addition to what `cabal-doctest` instructs+  it to.++  Hence, `cabal-doctest` tells GHC to ignore package environments+  altogether on the command line. However, this is only possible since+  GHC 8.2. If you are using `cabal-doctest` with Stack 2 and GHC 8.0+  or earlier and seeing ambiguous module errors or other mysterious+  failures, try manually unsetting `GHC_ENVIRONMENT` before invoking+  `doctest`.  Copyright ---------
cabal-doctest.cabal view
@@ -1,53 +1,46 @@-name:                cabal-doctest-version:             1.0.7-synopsis:            A Setup.hs helper for doctests running+name:               cabal-doctest+version:            1.0.8+synopsis:           A Setup.hs helper for doctests running description:   Currently (beginning of 2017), there isn't @cabal doctest@   command. Yet, to properly work doctest needs plenty of configuration.   This library provides the common bits for writing custom Setup.hs-   See <https://github.com/haskell/cabal/issues/2327 Cabal/2327> for the progress   of @cabal doctest@, i.e. whether this library is obsolete. -homepage:            https://github.com/phadej/cabal-doctest-license:             BSD3-license-file:        LICENSE-author:              Oleg Grenrus <oleg.grenrus@iki.fi>-maintainer:          Oleg Grenrus <oleg.grenrus@iki.fi>-copyright:           (c) 2017 Oleg Grenrus-category:            Distribution-build-type:          Simple-cabal-version:       >=1.10-extra-source-files:  ChangeLog.md README.md-tested-with:-  GHC==7.0.4,-  GHC==7.2.2,-  GHC==7.4.2,-  GHC==7.6.3,-  GHC==7.8.4,-  GHC==7.10.3,-  GHC==8.0.2,-  GHC==8.2.2,-  GHC==8.4.4,-  GHC==8.6.5,-  GHC==8.8.1+homepage:           https://github.com/phadej/cabal-doctest+license:            BSD3+license-file:       LICENSE+author:             Oleg Grenrus <oleg.grenrus@iki.fi>+maintainer:         Oleg Grenrus <oleg.grenrus@iki.fi>+copyright:          (c) 2017 Oleg Grenrus+category:           Distribution+build-type:         Simple+cabal-version:      >=1.10+extra-source-files:+  ChangeLog.md+  README.md +tested-with:        GHC ==8.8.1 || >=7.4 && <8.8 || ==7.2.2 || ==7.0.4+ source-repository head   type:     git   location: https://github.com/phadej/cabal-doctest  library-  exposed-modules:     Distribution.Extra.Doctest+  exposed-modules:  Distribution.Extra.Doctest   other-modules:   other-extensions:   build-depends:-    base >=4.3 && <4.14,-    Cabal >= 1.10 && <3.1,-    filepath,-    directory-  hs-source-dirs:      src-  default-language:    Haskell2010-  ghc-options:         -Wall-  if !impl(ghc >= 7.2)+      base       >=4.3  && <4.14+    , Cabal      >=1.10 && <3.1+    , directory+    , filepath++  hs-source-dirs:   src+  default-language: Haskell2010+  ghc-options:      -Wall++  if !impl(ghc >=7.2)     -- Work around a pattern-match coverage checking bug in GHC 7.0-    ghc-options:       -fno-warn-overlapping-patterns+    ghc-options: -fno-warn-overlapping-patterns
src/Distribution/Extra/Doctest.hs view
@@ -46,47 +46,51 @@  import Control.Monad        (when)+import Data.IORef+       (modifyIORef, newIORef, readIORef) import Data.List        (nub) import Data.Maybe-       (maybeToList, mapMaybe)+       (mapMaybe, maybeToList) import Data.String        (fromString)-import qualified Data.Foldable as F-       (for_)-import qualified Data.Traversable as T-       (traverse) import Distribution.Package-       (InstalledPackageId)-import Distribution.Package-       (Package (..), PackageId, packageVersion)+       (InstalledPackageId, Package (..)) import Distribution.PackageDescription-       (BuildInfo (..), Executable (..), Library (..), GenericPackageDescription,-       PackageDescription (), TestSuite (..))+       (BuildInfo (..), Executable (..), GenericPackageDescription,+       Library (..), PackageDescription, TestSuite (..)) import Distribution.Simple-       (UserHooks (..), autoconfUserHooks, defaultMainWithHooks, simpleUserHooks)+       (UserHooks (..), autoconfUserHooks, defaultMainWithHooks,+       simpleUserHooks) import Distribution.Simple.Compiler-       (PackageDB (..), showCompilerId)+       (CompilerFlavor (GHC), CompilerId (..), PackageDB (..), compilerId) import Distribution.Simple.LocalBuildInfo-       (ComponentLocalBuildInfo (componentPackageDeps), LocalBuildInfo (),+       (ComponentLocalBuildInfo (componentPackageDeps), LocalBuildInfo,        compiler, withExeLBI, withLibLBI, withPackageDB, withTestLBI) import Distribution.Simple.Setup-       (BuildFlags (buildDistPref, buildVerbosity), HaddockFlags (haddockDistPref, haddockVerbosity), fromFlag, emptyBuildFlags)+       (BuildFlags (buildDistPref, buildVerbosity),+       HaddockFlags (haddockDistPref, haddockVerbosity), emptyBuildFlags,+       fromFlag) import Distribution.Simple.Utils        (createDirectoryIfMissingVerbose, info) import Distribution.Text-       (display, simpleParse)+       (display) import System.FilePath        ((</>)) -import Data.IORef (newIORef, modifyIORef, readIORef)+import qualified Data.Foldable    as F+                 (for_)+import qualified Data.Traversable as T+                 (traverse) -import Distribution.Simple.BuildPaths #if MIN_VERSION_Cabal(1,25,0)+import Distribution.Simple.BuildPaths        (autogenComponentModulesDir) #else+import Distribution.Simple.BuildPaths        (autogenModulesDir) #endif+ #if MIN_VERSION_Cabal(2,0,0) import Distribution.Types.MungedPackageId        (MungedPackageId)@@ -94,20 +98,31 @@        (unUnqualComponentName)  -- For amendGPD-import Distribution.Types.GenericPackageDescription-       (GenericPackageDescription (condTestSuites)) import Distribution.PackageDescription        (CondTree (..))+import Distribution.Types.GenericPackageDescription+       (GenericPackageDescription (condTestSuites))++import Distribution.Version+       (mkVersion)+#else+import Data.Version+       (Version (..))+import Distribution.Package+       (PackageId) #endif  #if MIN_VERSION_Cabal(3,0,0)-import Distribution.Simple.Utils (findFileEx)+import Distribution.Simple.Utils+       (findFileEx) #else-import Distribution.Simple.Utils (findFile)+import Distribution.Simple.Utils+       (findFile) #endif  #if MIN_VERSION_Cabal(3,0,0)-import Distribution.Types.LibraryName (libraryNameString)+import Distribution.Types.LibraryName+       (libraryNameString) #endif  #if MIN_VERSION_directory(1,2,2)@@ -131,6 +146,15 @@ findFileEx _ = findFile #endif +#if !MIN_VERSION_Cabal(2,0,0)+mkVersion :: [Int] -> Version+mkVersion ds = Version ds []+#endif++-------------------------------------------------------------------------------+-- Mains+-------------------------------------------------------------------------------+ -- | A default main with doctests: -- -- @@@ -227,9 +251,12 @@   let verbosity = fromFlag (buildVerbosity flags)   let distPref = fromFlag (buildDistPref flags) -  -- Package DBs+  -- Package DBs & environments   let dbStack = withPackageDB lbi ++ [ SpecificPackageDB $ distPref </> "package.conf.inplace" ]   let dbFlags = "-hide-all-packages" : packageDbArgs dbStack+  let envFlags+        | ghcCanBeToldToIgnorePkgEnvs = [ "-package-env=-" ]+        | otherwise = []    withTestLBI pkg lbi $ \suite suitecfg -> when (testName suite == fromString testSuiteName) $ do #if MIN_VERSION_Cabal(1,25,0)@@ -331,6 +358,7 @@                   [ iArgs                   , additionalDirs                   , includeArgs+                  , envFlags                   , dbFlags                   , cppFlags                   , extensionArgs@@ -388,11 +416,15 @@     parseComponentName _ = Nothing      -- we do this check in Setup, as then doctests don't need to depend on Cabal-    isOldCompiler = maybe False id $ do-      a <- simpleParse $ showCompilerId $ compiler lbi-      b <- simpleParse "7.5"-      return $ packageVersion (a :: PackageId) < b+    isNewCompiler = case compilerId $ compiler lbi of+      CompilerId GHC v -> v >= mkVersion [7,6]+      _                -> False +    ghcCanBeToldToIgnorePkgEnvs :: Bool+    ghcCanBeToldToIgnorePkgEnvs = case compilerId $ compiler lbi of+      CompilerId GHC v -> v >= mkVersion [8,4,4]+      _                -> False+     formatDeps = map formatOne     formatOne (installedPkgId, pkgId)       -- The problem is how different cabal executables handle package databases@@ -408,8 +440,8 @@      -- From Distribution.Simple.Program.GHC     packageDbArgs :: [PackageDB] -> [String]-    packageDbArgs | isOldCompiler = packageDbArgsConf-                  | otherwise     = packageDbArgsDb+    packageDbArgs | isNewCompiler = packageDbArgsDb+                  | otherwise     = packageDbArgsConf      -- GHC <7.6 uses '-package-conf' instead of '-package-db'.     packageDbArgsConf :: [PackageDB] -> [String]@@ -476,7 +508,7 @@     -> GenericPackageDescription     -> GenericPackageDescription #if !(MIN_VERSION_Cabal(2,0,0))-amendGPD _ = id+amendGPD _ gpd = gpd #else amendGPD testSuiteName gpd = gpd     { condTestSuites = map f (condTestSuites gpd)