aboutsummaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorDaniel Gröber <dxld@darkboxed.org>2019-09-25 17:09:17 +0200
committerDaniel Gröber <dxld@darkboxed.org>2019-09-29 02:49:05 +0200
commitca9f53e4133f185f353a6d9e13257cddfd621ec2 (patch)
tree213937725f5803d07c603b8706acb7063f5a8127 /tests
parent7ddd09a4862c98dd7115e78d762511dbe1d26e68 (diff)
Add support for symlink farming as a workaround for Stack
We want to be able to have the build tool use exactly the compiler and related executables we choose. Stack doesn't really like that mode of operation and insists on getting everything from PATH itself so this commit adds support for creating a temporary symlink farm to convince Stack to use the executables we want it to use.
Diffstat (limited to 'tests')
-rw-r--r--tests/ProgramsTest.hs76
1 files changed, 76 insertions, 0 deletions
diff --git a/tests/ProgramsTest.hs b/tests/ProgramsTest.hs
new file mode 100644
index 0000000..467c1cc
--- /dev/null
+++ b/tests/ProgramsTest.hs
@@ -0,0 +1,76 @@
+{-| This test checks if 'guessCompProgramPaths'\'s behaviour makes sense
+-}
+
+{-# OPTIONS_GHC -fno-warn-incomplete-patterns #-}
+
+import Control.Monad
+import Data.List
+import System.Directory
+import System.Environment
+import System.Exit
+import System.FilePath
+import System.IO.Temp
+import Text.Show.Pretty
+
+import CabalHelper.Compiletime.Types
+import CabalHelper.Compiletime.CompPrograms
+import Symlink (createSymbolicLink)
+
+main :: IO ()
+main = do
+ prog_name <- getProgName
+ args <- getArgs
+ case prog_name of
+ "programs-test"
+ | "ghc":ver:rest <- args -> ghc ver rest
+ | "ghc-pkg":ver:rest <- args -> ghc_pkg ver rest
+ | "haddock":ver:rest <- args -> haddock ver rest
+ | otherwise -> do_test
+ _
+ | Just ver <- stripPrefix "ghc-pkg-" prog_name -> ghc_pkg ver args
+ | Just ver <- stripPrefix "ghc-" prog_name -> ghc ver args
+ | Just ver <- stripPrefix "haddock-" prog_name -> haddock ver args
+ where
+ ghc _ver ["--info"] = putStrLn "[]" -- seems we can get away with that :)
+ ghc ver ["--numeric-version"] = putStrLn ver
+ ghc _ver ["--supported-languages"] = return ()
+
+ ghc_pkg ver ["--version"] =
+ putStrLn $ "GHC package manager version " ++ ver
+
+ haddock _ver ["--version"] =
+ putStrLn $ -- cabal isn't very picky about haddock versions so we just
+ -- hardocde it here
+ "Haddock version 2.20.0, (c) Simon Marlow 2006" ++
+ "Ported to use the GHC API by David Waern 2006-2008"
+
+do_test :: IO ()
+do_test = do
+ prog <- canonicalizePath =<< getExecutablePath
+
+ withSystemTempDirectory "c-h-programs-test" $ \tmpdir -> do
+
+ forM_ ["8.6.5", "8.4.4"] $ \ver -> do
+
+ let ghc = tmpdir </> "ghc-" ++ ver
+ let ghc_pkg = tmpdir </> "ghc-pkg-" ++ ver
+ let haddock = tmpdir </> "haddock-" ++ ver
+ let progs = defaultPrograms { ghcProgram = ghc }
+
+ createSymbolicLink prog ghc
+ createSymbolicLink prog ghc_pkg
+ createSymbolicLink prog haddock
+
+ let ?verbose = (==4)
+
+ progs' <- guessCompProgramPaths progs
+
+ pPrint (ghc, ghc_pkg, haddock) -- expected
+ pPrint progs' -- actual
+
+ when (not $ and [ ghcPkgProgram progs' == ghc_pkg
+ , haddockProgram progs' == haddock
+ ])
+ exitFailure
+
+ putStr "\n\n"