Fix the path to touchy (#572)
authorAndrey Mokhov <andrey.mokhov@gmail.com>
Mon, 16 Apr 2018 19:01:00 +0000 (20:01 +0100)
committerGitHub <noreply@github.com>
Mon, 16 Apr 2018 19:01:00 +0000 (20:01 +0100)
* Fix the path to touchy

* Allow binaries to live in lib/bin

src/GHC.hs
src/Rules/Program.hs

index 5a7dc31..0262823 100644 (file)
@@ -128,8 +128,12 @@ installStage pkg
 -- | The 'FilePath' to a program executable in a given 'Context'.
 programPath :: Context -> Action FilePath
 programPath context@Context {..} = do
-    path    <- stageBinPath stage
-    pgm     <- programName context
+    -- The @touchy@ utility lives in the @lib/bin@ directory instead of @bin@,
+    -- which is likely just a historical accident that will hopefully be fixed.
+    -- See: https://github.com/snowleopard/hadrian/issues/570
+    path <- if package /= touchy then stageBinPath stage
+                                 else stageLibPath stage <&> (-/- "bin")
+    pgm  <- programName context
     return $ path -/- pgm <.> exe
 
 -- | Some contexts are special: their packages do not have @.cabal@ metadata or
index 32a8eb8..67a310f 100644 (file)
@@ -19,7 +19,8 @@ buildProgram :: [(Resource, Int)] -> Rules ()
 buildProgram rs = do
     root <- buildRootRules
     forM_ [Stage0 ..] $ \stage ->
-      root -/- stageString stage -/- "bin" -/- "*" %> \bin -> do
+      [ root -/- stageString stage -/- "bin"     -/- "*"
+      , root -/- stageString stage -/- "lib/bin" -/- "*" ] |%> \bin -> do
 
           -- quite inefficient. But we can't access the programName from
           -- Rules, as it's an Action, due to being backed by an Oracle.