summaryrefslogtreecommitdiff
path: root/hadrian/src/Rules/Selftest.hs
diff options
context:
space:
mode:
authorP.C. Shyamshankar <shyam@galois.com>2019-01-24 13:07:34 -0500
committerMarge Bot <ben+marge-bot@smart-cactus.org>2019-03-06 09:17:22 -0500
commit2ff77b9894eecf51fa619ed2266ca196e296cd1e (patch)
tree656eaf880e2e76ffb39b2c24a21fc1ace11004bb /hadrian/src/Rules/Selftest.hs
parentdb039a4a10fc8fa9e03e6781d1c0dc33151beda6 (diff)
downloadhaskell-2ff77b9894eecf51fa619ed2266ca196e296cd1e.tar.gz
Handle absolute paths to build roots in Hadrian.
Fixes #16187. This patch fixes various path concatenation issues to allow functioning builds with hadrian when the build root location is specified with an absolute path. Remarks: - The path concatenation operator (-/-) now handles absolute second operands appropriately. Its behavior should match that of POSIX (</>) in this regard. - The `getDirectoryFiles*` family of functions only searches for matches under the directory tree rooted by its first argument; all of the results are also relative to this root. If the first argument is the empty string, the current working directory is used. This patch passes the appropriate directory (almost always either `top` or `root`), and subsequently attaches that directory prefix so that the paths refer to the appropriate files. - Windows `tar` does not like colons (':') in paths to archive files, it tries to resolve them as remote paths. The `--force-local` option remedies this, and is applied on windows builds.
Diffstat (limited to 'hadrian/src/Rules/Selftest.hs')
-rw-r--r--hadrian/src/Rules/Selftest.hs14
1 files changed, 14 insertions, 0 deletions
diff --git a/hadrian/src/Rules/Selftest.hs b/hadrian/src/Rules/Selftest.hs
index 68aa6e3889..b931f85ef6 100644
--- a/hadrian/src/Rules/Selftest.hs
+++ b/hadrian/src/Rules/Selftest.hs
@@ -13,6 +13,8 @@ import Settings
import Target
import Utilities
+import qualified System.FilePath.Posix as Posix ((</>))
+
instance Arbitrary Way where
arbitrary = wayFromUnits <$> arbitrary
@@ -31,6 +33,7 @@ selftestRules =
testLookupAll
testModuleName
testPackages
+ testPaths
testWay
testBuilder :: Action ()
@@ -111,3 +114,14 @@ testWay :: Action ()
testWay = do
putBuild "==== Read Way, Show Way"
test $ \(x :: Way) -> read (show x) == x
+
+testPaths :: Action ()
+testPaths = do
+ putBuild "==== Absolute, Relative Path Concatenation"
+ test $ forAll paths $ \(path1, path2) ->
+ path1 -/- path2 == path1 Posix.</> path2
+ where
+ paths = (,) <$> path <*> path
+ path = frequency [(1, relativePath), (1, absolutePath)]
+ relativePath = intercalate "/" <$> listOf1 (elements ["a"])
+ absolutePath = ('/':) <$> relativePath