summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--gnu/local.mk2
-rw-r--r--gnu/packages/haskell-apps.scm3
-rw-r--r--gnu/packages/patches/cabal-install-base16-bytestring1.0.patch29
-rw-r--r--gnu/packages/patches/cabal-install-ghc8.10.patch393
4 files changed, 427 insertions, 0 deletions
diff --git a/gnu/local.mk b/gnu/local.mk
index db7509e623..1d46738cfc 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -908,6 +908,8 @@ dist_patch_DATA =						\
   %D%/packages/patches/blender-2.79-python-3.8-fix.patch	\
   %D%/packages/patches/bpftrace-disable-bfd-disasm.patch	\
   %D%/packages/patches/byobu-writable-status.patch		\
+  %D%/packages/patches/cabal-install-base16-bytestring1.0.patch		\
+  %D%/packages/patches/cabal-install-ghc8.10.patch		\
   %D%/packages/patches/cairo-CVE-2018-19876.patch		\
   %D%/packages/patches/cairo-CVE-2020-35492.patch		\
   %D%/packages/patches/calibre-no-updates-dialog.patch		\
diff --git a/gnu/packages/haskell-apps.scm b/gnu/packages/haskell-apps.scm
index 9b6de7607c..ca96680b67 100644
--- a/gnu/packages/haskell-apps.scm
+++ b/gnu/packages/haskell-apps.scm
@@ -40,6 +40,7 @@
   #:use-module (guix packages)
   #:use-module ((guix licenses) #:prefix license:)
   #:use-module (guix build-system haskell)
+  #:use-module (gnu packages)
   #:use-module (gnu packages base)
   #:use-module (gnu packages curl)
   #:use-module (gnu packages gl)
@@ -105,6 +106,8 @@ library.  It is primarily used with HLint's @code{--refactor} flag.")
             "https://hackage.haskell.org/package/cabal-install/cabal-install-"
             version
             ".tar.gz"))
+      (patches (search-patches "cabal-install-base16-bytestring1.0.patch"
+                               "cabal-install-ghc8.10.patch"))
       (sha256
        (base32 "1c0cc256bha97aj7l0lf76l5swlnmwcqppiz8l4cl5xgba4mwmd0"))))
    (build-system haskell-build-system)
diff --git a/gnu/packages/patches/cabal-install-base16-bytestring1.0.patch b/gnu/packages/patches/cabal-install-base16-bytestring1.0.patch
new file mode 100644
index 0000000000..998bf08718
--- /dev/null
+++ b/gnu/packages/patches/cabal-install-base16-bytestring1.0.patch
@@ -0,0 +1,29 @@
+Restore compatibility with newer version of base16-bytestring.
+
+Taken from https://raw.githubusercontent.com/archlinux/svntogit-community/packages/trunk/cabal-install-base16-bytestring1.0.patch
+
+diff --git a/Distribution/Client/HashValue.hs b/Distribution/Client/HashValue.hs
+index 54b8aee9e..11e647c1c 100644
+--- a/Distribution/Client/HashValue.hs
++++ b/Distribution/Client/HashValue.hs
+@@ -1,3 +1,4 @@
++{-# LANGUAGE CPP          #-}
+ {-# LANGUAGE DeriveDataTypeable #-}
+ {-# LANGUAGE DeriveGeneric      #-}
+ module Distribution.Client.HashValue (
+@@ -72,10 +73,14 @@ hashFromTUF (Sec.Hash hashstr) =
+     --TODO: [code cleanup] either we should get TUF to use raw bytestrings or
+     -- perhaps we should also just use a base16 string as the internal rep.
+     case Base16.decode (BS.pack hashstr) of
++#if MIN_VERSION_base16_bytestring(1,0,0)
++      Right hash -> HashValue hash
++      Left _ -> error "hashFromTUF: cannot decode base16"
++#else
+       (hash, trailing) | not (BS.null hash) && BS.null trailing
+         -> HashValue hash
+       _ -> error "hashFromTUF: cannot decode base16 hash"
+-
++#endif
+ 
+ -- | Truncate a 32 byte SHA256 hash to
+ --
diff --git a/gnu/packages/patches/cabal-install-ghc8.10.patch b/gnu/packages/patches/cabal-install-ghc8.10.patch
new file mode 100644
index 0000000000..67c0953058
--- /dev/null
+++ b/gnu/packages/patches/cabal-install-ghc8.10.patch
@@ -0,0 +1,393 @@
+From ac9b41eef3c781ce188ded2551f98fe75152e30c Mon Sep 17 00:00:00 2001
+From: Oleg Grenrus <oleg.grenrus@iki.fi>
+Date: Tue, 14 Apr 2020 11:31:34 +0300
+Subject: [PATCH] GHC-8.10 support for 3.2
+
+Includes cherry-picked commits:
+
+- Test cabal-install with GHC-8.10 #6709
+- Add GHC-8.10.1 job. Only tests Cabal-the-lib part atm. #6617
+
+Also add topHandler' signature.
+---
+ .docker/validate-8.10.1.dockerfile            |  60 ++++++
+ .github/workflows/artifacts.yml               |   6 +-
+ .github/workflows/bootstrap.yml               |   4 +-
+ .github/workflows/linux.yml                   | 179 ++++++++++++------
+ .github/workflows/macos.yml                   |  40 ++--
+ .github/workflows/quick-jobs.yml              |   4 +-
+ .github/workflows/windows.yml                 | 117 +++++++++++-
+ .../Distribution/PackageDescription/Quirks.hs |  19 +-
+ Makefile                                      |   4 +
+ boot/ci-artifacts.template.yml                |   6 +-
+ boot/ci-bootstrap.template.yml                |   4 +-
+ boot/ci-linux.template.yml                    |   8 +-
+ boot/ci-macos.template.yml                    |   7 +-
+ boot/ci-quick-jobs.template.yml               |   4 +-
+ boot/ci-windows.template.yml                  |   8 +-
+ cabal-dev-scripts/src/GenValidate.hs          |  33 ++--
+ Distribution/Client/CmdSdist.hs |   3 +
+ .../Distribution/Client/FetchUtils.hs         |   4 +-
+ .../Distribution/Client/IndexUtils.hs         |   2 +-
+ Distribution/Client/Sandbox.hs  |   5 +-
+ .../Distribution/Client/TargetSelector.hs     |   2 +-
+ Distribution/Client/Update.hs   |   4 +-
+ .../Distribution/Client/Utils/Json.hs         |  13 +-
+ .../Distribution/Solver/Modular/Assignment.hs |  11 +-
+ .../Distribution/Solver/Modular/Builder.hs    |  10 +-
+ .../Distribution/Solver/Modular/Index.hs      |   6 +-
+ .../Solver/Modular/IndexConversion.hs         |   8 +-
+ .../Distribution/Solver/Modular/Solver.hs     |  12 +-
+ .../Distribution/Solver/Modular/Validate.hs   |   5 +-
+ bootstrap.sh                    |   6 +-
+ cabal-install.cabal             |   4 +-
+ cabal-install.cabal.pp          |   4 +-
+ .../targets/complex/q/q.cabal                 |   3 +-
+ cabal-testsuite/cabal-testsuite.cabal         |   4 +-
+ validate.sh                                   |  21 +-
+ 35 files changed, 461 insertions(+), 169 deletions(-)
+ create mode 100644 .docker/validate-8.10.1.dockerfile
+diff --git a/Distribution/Client/CmdSdist.hs b/Distribution/Client/CmdSdist.hs
+index 9ce0c80100e..a22317004c4 100644
+--- a/Distribution/Client/CmdSdist.hs
++++ b/Distribution/Client/CmdSdist.hs
+@@ -237,7 +237,10 @@ packageToSdist verbosity projectRootDir format outputFile pkg = do
+         (norm NoExec -> nonexec, norm Exec -> exec) <-
+            listPackageSources verbosity (flattenPackageDescription $ packageDescription pkg) knownSuffixHandlers
+ 
++        print $ map snd exec
++        print $ map snd nonexec
+         let files =  nub . sortOn snd $ nonexec ++ exec
++        print files
+ 
+         case format of
+             SourceList nulSep -> do
+diff --git a/Distribution/Client/FetchUtils.hs b/Distribution/Client/FetchUtils.hs
+index e9a31a91f84..4e5e581f9ec 100644
+--- a/Distribution/Client/FetchUtils.hs
++++ b/Distribution/Client/FetchUtils.hs
+@@ -176,8 +176,8 @@ fetchRepoTarball verbosity' repoCtxt repo pkgid = do
+     verbosity = verboseUnmarkOutput verbosity'
+ 
+     downloadRepoPackage = case repo of
+-      RepoLocal{..} -> return (packageFile repo pkgid)
+-      RepoLocalNoIndex{..} -> return (packageFile repo pkgid)
++      RepoLocal{} -> return (packageFile repo pkgid)
++      RepoLocalNoIndex{} -> return (packageFile repo pkgid)
+ 
+       RepoRemote{..} -> do
+         transport <- repoContextGetTransport repoCtxt
+diff --git a/Distribution/Client/IndexUtils.hs b/Distribution/Client/IndexUtils.hs
+index a76becc05ba..bf0ff7cf5ba 100644
+--- a/Distribution/Client/IndexUtils.hs
++++ b/Distribution/Client/IndexUtils.hs
+@@ -634,7 +634,7 @@ withIndexEntries
+     -> ([IndexCacheEntry] -> IO a)
+     -> ([NoIndexCacheEntry] -> IO a)
+     -> IO a
+-withIndexEntries _ (RepoIndex repoCtxt repo@RepoSecure{..}) callback _ =
++withIndexEntries _ (RepoIndex repoCtxt repo@RepoSecure{}) callback _ =
+     repoContextWithSecureRepo repoCtxt repo $ \repoSecure ->
+       Sec.withIndex repoSecure $ \Sec.IndexCallbacks{..} -> do
+         -- Incrementally (lazily) read all the entries in the tar file in order,
+diff --git a/Distribution/Client/Sandbox.hs b/Distribution/Client/Sandbox.hs
+index 66b415d7239..14bad3f2135 100644
+--- a/Distribution/Client/Sandbox.hs
++++ b/Distribution/Client/Sandbox.hs
+@@ -666,7 +666,7 @@ reinstallAddSourceDeps :: Verbosity
+                           -> FilePath
+                           -> IO WereDepsReinstalled
+ reinstallAddSourceDeps verbosity configFlags' configExFlags
+-                       installFlags globalFlags sandboxDir = topHandler' $ do
++                       installFlags globalFlags sandboxDir = topHandlerWith errorMsg $ do
+   let sandboxDistPref     = sandboxBuildDir sandboxDir
+       configFlags         = configFlags'
+                             { configDistPref  = Flag sandboxDistPref }
+@@ -710,7 +710,8 @@ reinstallAddSourceDeps verbosity configFlags' configExFlags
+         ++ "offending packages or recreating the sandbox."
+       logMsg message rest = debugNoWrap verbosity message >> rest
+ 
+-      topHandler' = topHandlerWith $ \_ -> do
++      errorMsg :: a -> IO WereDepsReinstalled
++      errorMsg _ = do
+         warn verbosity "Couldn't reinstall some add-source dependencies."
+         -- Here we can't know whether any deps have been reinstalled, so we have
+         -- to be conservative.
+diff --git a/Distribution/Client/TargetSelector.hs b/Distribution/Client/TargetSelector.hs
+index 23d92f580fd..f8f683d9875 100644
+--- a/Distribution/Client/TargetSelector.hs
++++ b/Distribution/Client/TargetSelector.hs
+@@ -222,7 +222,7 @@ readTargetSelectorsWith :: (Applicative m, Monad m) => DirActions m
+                         -> Maybe ComponentKindFilter
+                         -> [String]
+                         -> m (Either [TargetSelectorProblem] [TargetSelector])
+-readTargetSelectorsWith dirActions@DirActions{..} pkgs mfilter targetStrs =
++readTargetSelectorsWith dirActions@DirActions{} pkgs mfilter targetStrs =
+     case parseTargetStrings targetStrs of
+       ([], usertargets) -> do
+         usertargets' <- mapM (getTargetStringFileStatus dirActions) usertargets
+diff --git a/Distribution/Client/Update.hs b/Distribution/Client/Update.hs
+index 52bb1f76c96..8ded78b9d2e 100644
+--- a/Distribution/Client/Update.hs
++++ b/Distribution/Client/Update.hs
+@@ -73,8 +73,8 @@ updateRepo :: Verbosity -> UpdateFlags -> RepoContext -> Repo -> IO ()
+ updateRepo verbosity updateFlags repoCtxt repo = do
+   transport <- repoContextGetTransport repoCtxt
+   case repo of
+-    RepoLocal{..} -> return ()
+-    RepoLocalNoIndex{..} -> return ()
++    RepoLocal{} -> return ()
++    RepoLocalNoIndex{} -> return ()
+     RepoRemote{..} -> do
+       downloadResult <- downloadIndex transport verbosity repoRemote repoLocalDir
+       case downloadResult of
+diff --git a/Distribution/Client/Utils/Json.hs b/Distribution/Client/Utils/Json.hs
+index 89a13af87a4..01d5753136b 100644
+--- a/Distribution/Client/Utils/Json.hs
++++ b/Distribution/Client/Utils/Json.hs
+@@ -15,12 +15,9 @@ module Distribution.Client.Utils.Json
+     )
+     where
+ 
+-import Data.Char
+-import Data.Int
+-import Data.String
+-import Data.Word
+-import Data.List
+-import Data.Monoid
++import Distribution.Client.Compat.Prelude
++
++import Data.Char (intToDigit)
+ 
+ import Data.ByteString.Builder (Builder)
+ import qualified Data.ByteString.Builder as BB
+@@ -135,13 +132,13 @@ encodeArrayBB :: [Value] -> Builder
+ encodeArrayBB [] = "[]"
+ encodeArrayBB jvs = BB.char8 '[' <> go jvs <> BB.char8 ']'
+   where
+-    go = Data.Monoid.mconcat . intersperse (BB.char8 ',') . map encodeValueBB
++    go = mconcat . intersperse (BB.char8 ',') . map encodeValueBB
+ 
+ encodeObjectBB :: Object -> Builder
+ encodeObjectBB [] = "{}"
+ encodeObjectBB jvs = BB.char8 '{' <> go jvs <> BB.char8 '}'
+   where
+-    go = Data.Monoid.mconcat . intersperse (BB.char8 ',') . map encPair
++    go = mconcat . intersperse (BB.char8 ',') . map encPair
+     encPair (l,x) = encodeStringBB l <> BB.char8 ':' <> encodeValueBB x
+ 
+ encodeStringBB :: String -> Builder
+diff --git a/Distribution/Solver/Modular/Assignment.hs b/Distribution/Solver/Modular/Assignment.hs
+index be5e63bfbc1..b05a099ec5a 100644
+--- a/Distribution/Solver/Modular/Assignment.hs
++++ b/Distribution/Solver/Modular/Assignment.hs
+@@ -9,10 +9,11 @@ module Distribution.Solver.Modular.Assignment
+ import Prelude ()
+ import Distribution.Solver.Compat.Prelude hiding (pi)
+ 
+-import Data.Array as A
+-import Data.List as L
+-import Data.Map as M
+-import Data.Maybe
++import qualified Data.Array as A
++import qualified Data.List as L
++import qualified Data.Map as M
++
++import Data.Maybe (fromJust)
+ 
+ import Distribution.PackageDescription (FlagAssignment, mkFlagAssignment) -- from Cabal
+ 
+@@ -79,7 +80,7 @@ toCPs (A pa fa sa) rdm =
+     -- Dependencies per package.
+     depp :: QPN -> [(Component, PI QPN)]
+     depp qpn = let v :: Vertex
+-                   v   = fromJust (cvm qpn)
++                   v   = fromJust (cvm qpn) -- TODO: why this is safe?
+                    dvs :: [(Component, Vertex)]
+                    dvs = tg A.! v
+                in L.map (\ (comp, dv) -> case vm dv of (_, x, _) -> (comp, PI x (pa M.! x))) dvs
+diff --git a/Distribution/Solver/Modular/Builder.hs b/Distribution/Solver/Modular/Builder.hs
+index eb11a36aa16..5d196f4fd9f 100644
+--- a/Distribution/Solver/Modular/Builder.hs
++++ b/Distribution/Solver/Modular/Builder.hs
+@@ -19,10 +19,10 @@ module Distribution.Solver.Modular.Builder (
+ -- flag-guarded dependencies, we cannot introduce them immediately. Instead, we
+ -- store the entire dependency.
+ 
+-import Data.List as L
+-import Data.Map as M
+-import Data.Set as S
+-import Prelude hiding (sequence, mapM)
++import qualified Data.List as L
++import qualified Data.Map as M
++import qualified Data.Set as S
++import Prelude
+ 
+ import qualified Distribution.Solver.Modular.ConflictSet as CS
+ import Distribution.Solver.Modular.Dependency
+@@ -55,7 +55,7 @@ data BuildState = BS {
+ }
+ 
+ -- | Map of available linking targets.
+-type LinkingState = Map (PN, I) [PackagePath]
++type LinkingState = M.Map (PN, I) [PackagePath]
+ 
+ -- | Extend the set of open goals with the new goals listed.
+ --
+diff --git a/Distribution/Solver/Modular/Index.hs b/Distribution/Solver/Modular/Index.hs
+index fdddfc8237a..ac60fec7d65 100644
+--- a/Distribution/Solver/Modular/Index.hs
++++ b/Distribution/Solver/Modular/Index.hs
+@@ -6,10 +6,12 @@ module Distribution.Solver.Modular.Index
+     , mkIndex
+     ) where
+ 
+-import Data.List as L
+-import Data.Map as M
+ import Prelude hiding (pi)
+ 
++import Data.Map (Map)
++import qualified Data.List as L
++import qualified Data.Map as M
++
+ import Distribution.Solver.Modular.Dependency
+ import Distribution.Solver.Modular.Flag
+ import Distribution.Solver.Modular.Package
+diff --git a/Distribution/Solver/Modular/IndexConversion.hs b/Distribution/Solver/Modular/IndexConversion.hs
+index c9565c80dba..8e9ef614184 100644
+--- a/Distribution/Solver/Modular/IndexConversion.hs
++++ b/Distribution/Solver/Modular/IndexConversion.hs
+@@ -2,12 +2,12 @@ module Distribution.Solver.Modular.IndexConversion
+     ( convPIs
+     ) where
+ 
+-import Data.List as L
++import qualified Data.List as L
+ import Data.Map.Strict (Map)
+ import qualified Data.Map.Strict as M
+-import Data.Maybe
++import Data.Maybe (mapMaybe, fromMaybe, maybeToList)
+ import Data.Monoid as Mon
+-import Data.Set as S
++import qualified Data.Set as S
+ 
+ import Distribution.Compiler
+ import Distribution.InstalledPackageInfo as IPI
+@@ -330,7 +330,7 @@ flagInfo (StrongFlags strfl) =
+ 
+ -- | Internal package names, which should not be interpreted as true
+ -- dependencies.
+-type IPNs = Set PN
++type IPNs = S.Set PN
+ 
+ -- | Convenience function to delete a 'Dependency' if it's
+ -- for a 'PN' that isn't actually real.
+diff --git a/Distribution/Solver/Modular/Solver.hs b/Distribution/Solver/Modular/Solver.hs
+index 32452550556..e6aa1fb4374 100644
+--- a/Distribution/Solver/Modular/Solver.hs
++++ b/Distribution/Solver/Modular/Solver.hs
+@@ -9,9 +9,9 @@ module Distribution.Solver.Modular.Solver
+     , PruneAfterFirstSuccess(..)
+     ) where
+ 
+-import Data.Map as M
+-import Data.List as L
+-import Data.Set as S
++import qualified Data.Map as M
++import qualified Data.List as L
++import qualified Data.Set as S
+ import Distribution.Verbosity
+ 
+ import Distribution.Compiler (CompilerInfo)
+@@ -91,8 +91,8 @@ solve :: SolverConfig                         -- ^ solver parameters
+       -> Index                                -- ^ all available packages as an index
+       -> PkgConfigDb                          -- ^ available pkg-config pkgs
+       -> (PN -> PackagePreferences)           -- ^ preferences
+-      -> Map PN [LabeledPackageConstraint]    -- ^ global constraints
+-      -> Set PN                               -- ^ global goals
++      -> M.Map PN [LabeledPackageConstraint]  -- ^ global constraints
++      -> S.Set PN                             -- ^ global goals
+       -> RetryLog Message SolverFailure (Assignment, RevDepMap)
+ solve sc cinfo idx pkgConfigDB userPrefs userConstraints userGoals =
+   explorePhase     $
+@@ -232,7 +232,7 @@ instance GSimpleTree (Tree d c) where
+ 
+       -- Show conflict set
+       goCS :: ConflictSet -> String
+-      goCS cs = "{" ++ (intercalate "," . L.map showVar . CS.toList $ cs) ++ "}"
++      goCS cs = "{" ++ (L.intercalate "," . L.map showVar . CS.toList $ cs) ++ "}"
+ #endif
+ 
+ -- | Replace all goal reasons with a dummy goal reason in the tree
+diff --git a/Distribution/Solver/Modular/Validate.hs b/Distribution/Solver/Modular/Validate.hs
+index 6195d101b02..a3dec6e1f67 100644
+--- a/Distribution/Solver/Modular/Validate.hs
++++ b/Distribution/Solver/Modular/Validate.hs
+@@ -15,11 +15,12 @@ module Distribution.Solver.Modular.Validate (validateTree) where
+ import Control.Applicative
+ import Control.Monad.Reader hiding (sequence)
+ import Data.Function (on)
+-import Data.List as L
+-import Data.Set as S
+ import Data.Traversable
+ import Prelude hiding (sequence)
+ 
++import qualified Data.List as L
++import qualified Data.Set as S
++
+ import Language.Haskell.Extension (Extension, Language)
+ 
+ import Data.Map.Strict as M
+diff --git a/bootstrap.sh b/bootstrap.sh
+index 077d7f4efd2..d5141660474 100755
+--- a/bootstrap.sh
++++ b/bootstrap.sh
+@@ -260,9 +260,9 @@ EDIT_DISTANCE_VER="0.2.2.1"; EDIT_DISTANCE_VER_REGEXP="0\.2\.2\.?"
+                        # 0.2.2.*
+ ED25519_VER="0.0.5.0"; ED25519_VER_REGEXP="0\.0\.?"
+                        # 0.0.*
+-HACKAGE_SECURITY_VER="0.6.0.0"; HACKAGE_SECURITY_VER_REGEXP="0\.6\."
+-                       # >= 0.7.0.0 && < 0.7
+-TAR_VER="0.5.1.0";     TAR_VER_REGEXP="0\.5\.([1-9]|1[0-9]|0\.[3-9]|0\.1[0-9])\.?"
++HACKAGE_SECURITY_VER="0.6.0.1"; HACKAGE_SECURITY_VER_REGEXP="0\.6\."
++                       # >= 0.6.0.0 && < 0.7
++TAR_VER="0.5.1.1";     TAR_VER_REGEXP="0\.5\.([1-9]|1[0-9]|0\.[3-9]|0\.1[0-9])\.?"
+                        # >= 0.5.0.3  && < 0.6
+ DIGEST_VER="0.0.1.2"; DIGEST_REGEXP="0\.0\.(1\.[2-9]|[2-9]\.?)"
+                        # >= 0.0.1.2 && < 0.1
+diff --git a/cabal-install.cabal b/cabal-install.cabal
+index 985ea9a5a69..c9d713c29fe 100644
+--- a/cabal-install.cabal
++++ b/cabal-install.cabal
+@@ -316,7 +316,7 @@ executable cabal
+     build-depends:
+         async      >= 2.0      && < 2.3,
+         array      >= 0.4      && < 0.6,
+-        base       >= 4.8      && < 4.14,
++        base       >= 4.8      && < 4.15,
+         base16-bytestring >= 0.1.1 && < 0.2,
+         binary     >= 0.7.3    && < 0.9,
+         bytestring >= 0.10.6.0 && < 0.11,
+@@ -341,7 +341,7 @@ executable cabal
+         time       >= 1.5.0.1  && < 1.10,
+         transformers >= 0.4.2.0 && < 0.6,
+         zlib       >= 0.5.3    && < 0.7,
+-        hackage-security >= 0.6.0.0 && < 0.7,
++        hackage-security >= 0.6.0.1 && < 0.7,
+         text       >= 1.2.3    && < 1.3,
+         parsec     >= 3.1.13.0 && < 3.2
+ 
+diff --git a/tests/IntegrationTests2/targets/complex/q/q.cabal b/tests/IntegrationTests2/targets/complex/q/q.cabal
+index 556fa4a4202..7ee22fcb28d 100644
+--- a/tests/IntegrationTests2/targets/complex/q/q.cabal
++++ b/tests/IntegrationTests2/targets/complex/q/q.cabal
+@@ -5,7 +5,8 @@ cabal-version: >= 1.2
+ 
+ library
+   exposed-modules: Q
+-  build-depends: base, filepath
++  -- we rely that filepath has filepath-tests component
++  build-depends: base, filepath >=1.4.0.0
+ 
+ executable buildable-false
+   main-is: Main.hs