-- | -- There is a bug in 'text' before 0.11.2.3 with Int8 'decimal' function, -- minor bug, actually, but it broke tests. So we can't use cabal's MIN_VERSION -- define because of it doesn't account for four number version. {-# LANGUAGE RecordWildCards #-} {-# LANGUAGE NamedFieldPuns #-} import Distribution.Simple import Distribution.PackageDescription import Distribution.Simple.PackageIndex import Distribution.Simple.LocalBuildInfo import Distribution.Simple.BuildPaths import Distribution.Simple.Setup import System.FilePath buildUserHook :: PackageDescription -> LocalBuildInfo -> UserHooks -> BuildFlags -> IO () buildUserHook pkgDescr lbi hooks flags = do (buildHook simpleUserHooks) newPkgDescr lbi hooks flags where -- Bug havd been fixed in 0.11.2.3 version lastBadVersion = Version [0, 11, 2, 2] [] package = PackageName "text" -- Suppose that least installed version used packageIndex = installedPkgs lbi minVersion = minimum $ map fst $ lookupPackageName packageIndex package -- Add CPP BADTEXT define, so we can check it in tests newOptions options | minVersion <= lastBadVersion = "-DBADTEXT" : options | otherwise = options -- Update options only in test suites newPkgDescr = pkgDescr { testSuites = newTestSuites } -- Create new test suites with updated options newTestSuites = map updateTest $ testSuites pkgDescr -- Change options in every single test suite updateTest t@TestSuite { testBuildInfo = b@BuildInfo { .. } } = t { testBuildInfo = b { cppOptions = newOptions cppOptions } } hooks :: UserHooks hooks = simpleUserHooks { buildHook = buildUserHook } main :: IO () main = defaultMainWithHooks hooks