Skip to content
Snippets Groups Projects
Commit 8bb2e421 authored by Ryan Scott's avatar Ryan Scott
Browse files

Declare alex as build-tool-depends

parent dde5ed16
No related branches found
No related tags found
1 merge request!62Adapt to 'Whitespace-sensitive bang patterns'
......@@ -53,6 +53,15 @@ newtype BrokenPackages = BrokenPackages { getBrokenPackageNames :: S.Set PkgName
failureExpected :: BrokenPackages -> PkgName -> Bool
failureExpected (BrokenPackages pkgs) name = name `S.member` pkgs
-- Packages that should be built by declaring a @build-tool-depends@
-- dependency, not a @build-depends@ dependency. This is necessary for packages
-- that do not have a library component (e.g., @alex@).
newtype BuildToolPackages = BuildToolPackages { getBuildToolPackageNames :: S.Set PkgName }
deriving (Semigroup, Monoid)
buildToolPackage :: BuildToolPackages -> PkgName -> Bool
buildToolPackage (BuildToolPackages pkgs) name = name `S.member` pkgs
data Config = Config { configPatchDir :: FilePath
, configCompiler :: FilePath
, configGhcOptions :: [String]
......@@ -62,6 +71,7 @@ data Config = Config { configPatchDir :: FilePath
, configExtraCabalFragments :: [FilePath]
, configExtraPackages :: [(Cabal.PackageName, Version)]
, configExpectedBrokenPkgs :: BrokenPackages
, configBuildToolPkgs :: BuildToolPackages
}
cabalOptions :: Config -> [String]
......@@ -82,6 +92,7 @@ config =
<*> extraCabalFragments
<*> extraPackages
<*> expectedBrokenPkgs
<*> buildToolPkgs
where
patchDir = option str (short 'p' <> long "patches" <> help "patch directory" <> value "./patches")
compiler = option str (short 'w' <> long "with-compiler" <> help "path of compiler")
......@@ -98,6 +109,11 @@ config =
$ option
(fmap toPkgName pkgName)
(short 'b' <> long "expect-broken" <> metavar "PKGNAME" <> help "expect the given package to fail to build")
buildToolPkgs =
fmap (BuildToolPackages . S.fromList) $ many
$ option
(fmap toPkgName pkgName)
(long "build-tool-package" <> metavar "PKGNAME" <> help "declare the given package with build-tool-depends, not build-depends")
pkgVer :: ReadM (Cabal.PackageName, Version)
pkgVer = str >>= parse . T.pack
......@@ -235,7 +251,7 @@ buildPackage cfg pname version = do
appendFile (dirName </> "cabal.project") "packages: .\n"
TIO.writeFile
(dirName </> concat ["test-", display pname, ".cabal"])
(makeTestCabalFile pname version)
(makeTestCabalFile cfg pname version)
-- run the build
code <- runProcess $ setWorkingDir dirName
......@@ -310,8 +326,8 @@ buildPackage cfg pname version = do
dirName = "test-" ++ display pname ++ "-" ++ display version
makeTestCabalFile :: Cabal.PackageName -> Version -> T.Text
makeTestCabalFile pname' ver' =
makeTestCabalFile :: Config -> Cabal.PackageName -> Version -> T.Text
makeTestCabalFile cfg pname' ver' =
[text|
cabal-version: 2.2
name: test-$pname
......@@ -319,12 +335,17 @@ makeTestCabalFile pname' ver' =
library
exposed-modules:
build-depends: $pname == $ver
$depends
default-language: Haskell2010
|]
where
pname = T.pack $ display pname'
ver = T.pack $ display ver'
depends | buildToolPackage (configBuildToolPkgs cfg) (toPkgName pname')
= "build-tool-depends: " <>
pname <> ":" <> pname <> " == " <> ver
| otherwise
= "build-depends: " <> pname <> " == " <> ver
setup :: Config -> IO ()
setup cfg = do
......
......@@ -34,6 +34,14 @@ function extra_package() {
EXTRA_OPTS="$EXTRA_OPTS --extra-package=$pkg_name==$version"
}
# Mark a package to be declared with build-tool-depends, not build-depends.
# This is necessary for packages that do not have a library component.
function build_tool_package() {
pkg_name="$1"
echo "Adding $pkg_name as a build-tool package"
EXTRA_OPTS="$EXTRA_OPTS --build-tool-package=$pkg_name"
}
if [ -z "$GHC" ]; then GHC=ghc; fi
function ghc_version() {
......@@ -73,3 +81,6 @@ extra_package generic-lens
extra_package microstache
extra_package singletons
extra_package servant
# Build-tool packages
build_tool_package alex
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment