Skip to content

Commit

Permalink
Add a test to check that build-tool-depends are used (haskell#10692)
Browse files Browse the repository at this point in the history
The testcase is not so easy to write because

* The bug only surfaces when the build-tool you are depending on is
  known (ie alex, happy etc)
* But then it is tricky to write a test, as we can't depend on the known
  tools or bundle the source for them.
* So we create a fake "alex", which cabal then invokes on a fake ".x"
  file. This is maybe a bit fragile if the way cabal invokes alex
  changes in future, but then the test can be modified as well.

Ticket haskell#10692
  • Loading branch information
mpickering authored and sheaf committed Jan 15, 2025
1 parent fafcb55 commit bb4ae8b
Show file tree
Hide file tree
Showing 8 changed files with 71 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
packages: client
optional-packages: pre-proc
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
module Main where

main = print 0
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
name: client
version: 0.1.0.0
synopsis: Checks build-tool-depends are put in PATH
license: BSD3
category: Testing
build-type: Simple
cabal-version: >=1.10

executable hello-world
main-is: Hello.hs
build-depends: base
build-tool-depends: pre-proc:alex
default-language: Haskell2010
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
module Main where

import System.Environment
import System.IO

-- This is a "fake" version of alex, so it should take the command line arguments
-- as alex.
main :: IO ()
main = do
(_:"-o":target:source:_) <- getArgs
let f '0' = '1'
f c = c
writeFile target . map f =<< readFile source
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
name: pre-proc
version: 999.999.999
synopsis: Checks build-tool-depends are put in PATH
license: BSD3
category: Testing
build-type: Simple
cabal-version: >=1.10

executable alex
main-is: MyCustomPreprocessor.hs
build-depends: base, directory
default-language: Haskell2010

executable bad-do-not-build-me
main-is: MyMissingPreprocessor.hs
build-depends: base, directory
default-language: Haskell2010
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
#! /usr/bin/env bash

echo "I am not the alex you are looking for"
exit 1
14 changes: 14 additions & 0 deletions cabal-testsuite/PackageTests/BuildToolDependsExternal/setup.out
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
# cabal v2-build
Configuration is affected by the following files:
- cabal.project
Resolving dependencies...
Build profile: -w ghc-<GHCVER> -O1
In order, the following will be built:
- pre-proc-999.999.999 (exe:alex) (first run)
- client-0.1.0.0 (exe:hello-world) (first run)
Configuring executable 'alex' for pre-proc-999.999.999...
Preprocessing executable 'alex' for pre-proc-999.999.999...
Building executable 'alex' for pre-proc-999.999.999...
Configuring executable 'hello-world' for client-0.1.0.0...
Preprocessing executable 'hello-world' for client-0.1.0.0...
Building executable 'hello-world' for client-0.1.0.0...
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
import Test.Cabal.Prelude
-- Test build-tool-depends isn't influenced by PATH
main = cabalTest $ do
env <- getTestEnv
addToPath (testTmpDir env </> "scripts/") $ cabal "v2-build" ["client"]

0 comments on commit bb4ae8b

Please sign in to comment.