Skip to content
Snippets Groups Projects
Commit 2c19bf35 authored by Matthew Pickering's avatar Matthew Pickering Committed by Mikolaj
Browse files

Add a test to check that extra-prog-path is honoured for local packages

Whilst fixing #10692, I realised there was also this bug where
extra-prog-path would not be honoured for specific packages.

The idea behind extra-prog-path is that each local package can use a
different version of a preprocessor if desired.
parent 24f83951
No related branches found
No related tags found
No related merge requests found
Showing
with 76 additions and 0 deletions
packages: client
This file is deliberately an invalid .x file,
to ensure that we pick up the local alex script rather than
any system-wide alex executable.
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
default-language: Haskell2010
#! /usr/bin/env bash
echo "I am not the alex you are looking for"
File added
path = "FINDSH/sh.exe"
args = "SCRIPTSDIR/alex"
#! /usr/bin/env bash
echo "I am the alex you are looking for"
echo "module Main where main = print ()" > $3
File added
path = "FINDSH/sh.exe"
args = "SCRIPTS2DIR/alex"
# 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:
- client-0.1.0.0 (exe:hello-world) (first run)
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...
import Test.Cabal.Prelude
import System.Directory
-- Test package-local extra-prog-path works.
main = cabalTest $ do
env <- getTestEnv
let
testDir = testCurrentDir env
tmpDir = testTmpDir env
scripts1 = tmpDir </> "scripts"
scripts2 = tmpDir </> "scripts2"
-------------------------
-- Workaround for the fact that, on Windows, Cabal will only look for
-- .exe files to satisfy executable dependencs. So we have to create
-- shim alex.exe files (the good one in 'scripts2', the bad one in 'scripts')
-- with the logic below.
when isWindows $ do
mb_sh <- fmap takeDirectory <$> liftIO (findExecutable "sh")
case mb_sh of
Nothing -> skip "no sh"
Just sh -> do
let escape = concatMap (\c -> case c of '\\' -> "\\\\\\\\"; x -> [x])
void $ shell "sed" [ "-i", "-e", "s/FINDSH/" <> escape sh <> "/g", escape (scripts1 </> "alex.shim"), escape (scripts2 </> "alex.shim") ]
void $ shell "sed" [ "-i", "-e", "s/SCRIPTSDIR/" <> escape scripts1 <> "/g", escape (scripts1 </> "alex.shim") ]
void $ shell "sed" [ "-i", "-e", "s/SCRIPTS2DIR/" <> escape scripts2 <> "/g", escape (scripts2 </> "alex.shim") ]
-- End of Windows workarounds
------------------------------
-- Add the 'scripts' directory to PATH, and add the 'scripts2' directory
-- to extra-prog-path.
--
-- This checks that the executables in extra-prog-path take priority over
-- those in PATH: 'scripts/alex' will fail, while 'scripts2/alex' will succeed.
liftIO $ appendFile (testDir </> "cabal.project") $
"\npackage client\n extra-prog-path:" ++ scripts2
addToPath scripts1 $ cabal "v2-build" ["client"]
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